TypeScript 中的索引签名是这样定义的:
字典
[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
}
由于以下错误,这无法编译:
索引签名参数必须是“字符串”或“数字”类型。
这不可能吗?
到底是为了什么?
因为
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 })