簡體   English   中英

TypeScript - 將類存儲為映射值?

[英]TypeScript - storing a class as a map value?

我上課很少。 Test~類擴展了FrameModel

如何從stringFrameModel子類創建映射?

import FrameModel from '../../FrameModel';
import TestShipModel from './TestGeneratorModel';
import TestGeneratorModel from './TestGeneratorModel';
import TestPlanetModel from './TestGeneratorModel';

export class DiscriminatorMappingData
{
    static mapping: { [key: string]: typeof FrameModel } = {
        "TestShip": TestShipModel,
        "TestGenerator": TestGeneratorModel,
        "TestPlanet": TestPlanetModel,
    }
}

最終會出現錯誤:

DiscriminatorMappingData.ts(8,5):錯誤TS2322:類型'{[x:string]:typeof“...'不能分配給'{[key:string]:typeof”......'。
索引簽名不兼容。
類型'typeof'... models / T ...'不能分配給'typeof'... / FrameModel''。
類型'typeof'... / models / T ...'中缺少屬性'FrameModel'。

我認為這可以用泛型完成,但我不確定如何。

您可以使用基類類型(FrameModel)聲明哈希表,並使用后代類型作為實際值(為簡單起見,我省略了模塊):

class FrameModel {
}

class TestShipModel extends FrameModel {
}
class TestGeneratorModel extends FrameModel {
}
class TestPlanetModel extends FrameModel {
}

export class DiscriminatorMappingData
{
    static mapping: { [key: string]: typeof FrameModel } = {
        "TestShip": TestShipModel,
        "TestGenerator": TestGeneratorModel,
        "TestPlanet": TestPlanetModel,
    }
}

此代碼適用於Typescript操場

(參考評論,這里是解決問題的方法。)

問題似乎與import語句有關,導入類時應包括大括號。 例如import {FrameModel}...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM