2017-04-14 5 views
1

私はkeyofを使用して、既存のJSライブラリで型の安全性を強化しようとしています(したがって、関数呼び出しを再定義することはできません)。クラスはそうのように、getset機能で、データ構造をラップ:Typescript keyof - 宣言で値を使用する方法?

これまでのところは良いです!しかし今、私はgetで使用している同じkeyof機能を使用してオブザーバを追加したいと思います。その2番目のパラメータはコールバックであり、提供されたキーの新しい値と古い値が与えられます。私はそうのようにそれを作成しようとしました:

type Callback<T, K extends keyof T> = (newValue: T[K], oldValue: T[K]) => void; 

declare class Component<T> { 
    observe(key: keyof T, cb: Callback<T, key>) 
} 

しかし、活字体はobserve機能でkeyの私の使用を拒否され、

を言うことは名前「キー」を見つけることができません

があります私は今この限界を乗り切るためにどんな方法でも?私はこれを行うことができます。

observe<K extends keyof T>(key: keyof T, cb: Callback<T,K>) 

をし、それが正常に動作しますが、それは私の実際のコードがあることを意味:ちょうど奇妙に見える

thing.observe<"key">("key", (newValue, oldValue) => {}) 

を。

答えて

1

はこれを使用してみてください:

type Callback<T, K extends keyof T> = (newValue: T[K], oldValue: T[K]) => void; 

declare class Component<T> { 
    observe<K extends keyof T>(key: K, cb: Callback<T, K>); 
} 

// example class 
class XClass extends Component<{ name: string; value: number; }> { 
    testFn(): void { 
     // here the first argument needs to be a name of a T property 
     // newValue and oldValue will be the same type of this property 
     this.observe("name", (newValue, oldValue) => { }); 
    } 
} 
+0

それは働きました!それは素晴らしいです、ありがとう。 – Alastair

+0

良い!あなたを助けてうれしい:) – Diullei

関連する問題