2017-11-17 12 views
1

私はハッシュのためのインタフェースを定義しています:拘束タイプはどうですか?

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; 
} 

同じエラーが。

どうすればこの問題を解決できますか?

+1

この質問に対する両方の回答を確認してくださいhttps://stackoverflow.com/questions/46885489/can-a-typescript-generic-constraint-provide-allowed-types – dbandstra

答えて

0

インデクサーのキーにジェネリックを使用することはできません。代わりに、各キータイプのためのインターフェイスを作成する必要があります。

export interface StringHash<T> { 
    [key: string]: T; 
} 

export interface NumberHash<T> { 
    [key: number]: T; 
} 

const x: StringHash<Example> = {}; 
const y: NumberHash<Example> = {}; 

うまくいけば、あなたは一般的なキーが働いていた場合、それはあなたにを実証するためのあらゆる努力非作業例を保存しないことを確認できます。

これが可能だったら言葉stringnumberは、式の中で、あなたがHash参照するたびに表示される場所、あなたが達成するだろうすべてが動いている
export interface Hash<TKey, T> { 
    [key: TKey]: T; 
} 

const x: Hash<string, Example> = {}; 
const y: Hash<number, Example> = {}; 

。 (つまり、NumberHashからHash<number,に移動します)。

これについては、issue #6641で説明しました。

関連する問題