2
索引簽名被如此定義:打字稿 - 如何打字原稿代表索引簽名作爲一個通用型
字典
[key: string]: T
陣列
[index: number]: T
這些可以被包裹成一些簡單的,可重複使用的類型:
type DictionaryIndex<T> = {
[key: string]: T
}
type ArrayIndex<T> = {
[index: number]: T
}
現在我想把它們包裝成一個單一的類型。我嘗試這樣做:
type Index<TKey extends string|number, TValue> = {
[key: TKey]: TValue
}
這並不編譯由於以下錯誤:
An index signature parameter must be of type 'string' or 'number'.
這是不可能的?
這到底是爲了什麼?
因爲
foo(obj: Index<string, Bar>)
foo(obj: Index<string, Bar> & Fooable<string>)
看起來整潔比
foo(obj: { [key: string]: Bar })
foo(obj: { [key: string]: Bar, canFoo: (foo: string) => Bar })
在TypeScript repo上存在一個問題:https://github.com/Microsoft/TypeScript/issues/13398 猜猜這是不可能的。 –