我正在为哈希定义接口:
export interface Hash<ValType> {
[key: string | number]: ValType;
}
此错误:
An index signature parameter type must be 'string' or 'number'. (parameter) key: string | number
然后我尝试了:
export interface Hash<KeyType extends number | string, ValType> {
[key: KeyType]: ValType;
}
同样的错误。
我怎样才能做到这一点?
答案 0 :(得分:0)
无法在索引器上使用通用键。相反,您需要为每个密钥类型创建一个接口:
export interface StringHash<T> {
[key: string]: T;
}
export interface NumberHash<T> {
[key: number]: T;
}
const x: StringHash<Example> = {};
const y: NumberHash<Example> = {};
希望您可以看到,如果通用密钥有效,它将不会为您节省任何费用非工作示例来演示:
export interface Hash<TKey, T> {
[key: TKey]: T;
}
const x: Hash<string, Example> = {};
const y: Hash<number, Example> = {};
如果这是可能的,那么每次引用string
时,您所实现的所有内容都会移动到表达式number
和Hash
中出现的位置。 (即它从NumberHash
移动到Hash<number,
)。
这已在issue #6641中讨论过。