簡體   English   中英

Typescript動態訪問屬性

[英]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|Vec4Vec2|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.

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