[英]Typescript dynamic access property
這是一個演示:
class Vec2 {};
class Vec3 {};
class Vec4 {};
let mylibs = {
Vec2: Vec2,
Vec3: Vec3,
Vec4: Vec4
};
let len = Math.round(Math.random() * 2) + 2;
let VecType = 'Vec' + len;
let randomVector = new mylibs[VecType]();
我想通過用戶輸入創建一些東西, VecType
是我用來模擬用戶輸入的東西。 上面的代碼有效,並且tsc
不會引發任何錯誤。 但是在我的vscode中,它告訴我一些錯誤。
我想解決這種錯誤。 謝謝。
正如錯誤所暗示的,一種解決方案是在類型中添加索引簽名,以便允許按任何字符串進行索引:
let mylibs : { [key: string]: new () => any} = {
Vec2: Vec2,
Vec3: Vec3,
Vec4: Vec4
};
如果要限制更嚴格,可以使用Vec*
類型的基類或所有屬性類型的聯合類型( Vec2|Vec3|Vec4
) Vec2|Vec3|Vec4
任何其他類型。
另一種選擇是,不按通用字符串索引,而是按mylibs
鍵的字符串mylibs
。 動態構造這樣的字符串將涉及強制轉換,但並不特別安全:
let VecType: keyof typeof mylibs = ('Vec' + len) as any;
let randomVector = new mylibs[VecType]();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.