2017-08-21 5 views
1

私はかなりTypeScriptが新しく、いくつかのコードをリファクタリングしようとしています。などTypescript:既知のオブジェクトのキーの1つとしてパラメータまたはプロパティを宣言します。

const Operators = { 
    equal: '=', 
    not_equal: '!=', 
    less: '<', 
    less_or_equal: '<=', 
    greater: '>', 
    greater_or_equal: '>=', 
    contains: '~' 
}; 

をそして私はクラスが定義されています:

は、私は、オブジェクトは、次のような定義されていることを考えると

class Query { 
    // I want to limit this to the keys defined in Operator 
    operator: string; 

    constructor(operator: string) { 
     this.operator = operator; 
    } 

    getOperatorValue: string { 
     return Operators[this.operator]; 
    } 
} 

がどのように私は、パラメータ「演算子は」の一つであることを強制することができますOperatorsのキー?

私はgetOperatorValue()内側の線に対して、次のエラーを取得:

Error: TS7017:Element implicitly has an 'any' type because type '{ equal: string; not_equal: string; less: string; less_or_equal: string; greater: string; greater...' has no index signature. 

これは活字体2.4.2を使用しています。

+0

ドキュメントは、タイプセーフなPartialクラスを実装するためにkeyOfの使用例を示した{[キー:文字列]:文字列} = ... ' – jonrsharpe

答えて

2

keyOf演算子、introduced in 2.1およびdocumented with index typesがあります。単にfunction foo<T>(bar: T, key: keyof T)keyが常にTの既知のキーになるようにしてください。それはタイプシステムの他の用途の中でtype-safely use string indexersに簡単な方法を提供します。あなたは `constの演算子を入力して、問題を解決することができ

type Readonly<T> = { 
    readonly [P in keyof T]: T[P]; 
} 
type Partial<T> = { 
    [P in keyof T]?: T[P]; 
} 
+3

ありがとう!私はこれを必要としました: '演算子:演算子のkeyof型'演算子 'が'型 'ではなく' const'として定義されています – arthurakay

+0

私はそれらの2つを混ぜ合わせたことはありませんでした。期待どおりに動作します。 :) – ssube

関連する問題