javascript - 如何定義具有動態鍵的類?
我需要定義一個具有像 'Methods' 這樣動態屬性的類。我寫了這個
type Methods = {
[name:string]:Function
}
class App <M extends Methods> {
[name: keyof M] : M[name] // dont work
}
var methods = {
action : Function,
move : Function
}
type M = keyof typeof methods;
type myApp = App<typeof methods>;
但是我收到以下錯誤。這些可以修復嗎?
索引簽名的參數類型不能是字面量類型或泛型類型。請考慮改用映射物件類型。
「name」指的是一個值,但在這裡被用作類型。你是想用「typeof name」嗎?
從匯出的介面回傳的索引簽名類型具有或正在使用私有名稱 'name'。
可重現的範例
答案#1
你似乎在尋找映射類型。但它們僅適用於 type 聲明,而不適用於 class:
type App<M extends Methods> = {
[name in keyof M]: M[name];
}
(完整演示)
如果你真的想定義一個類,你需要用具體的類型來定義它:
var methods = {
action: Function,
move: Function
}
type MyApp = App<typeof methods>;
class TheApp implements MyApp {
action!: typeof Function;
move!: typeof Function;
constructor() {
Object.assign(this, methods);
}
}
