2016-10-25 10 views
5

のは、我々はこの単純な例があるとしましょう:活字体:関数宣言のインターフェイスプロパティの型の安全性

interface Steps { 
    stepOne?: boolean; 
    stepTwo?: boolean; 
    stepThree?: boolean; 
} 

let steps: Steps = {}; 

function markStepDone (step: ???) { 
    steps[step] = true; 
} 


markStepDone('anything'); 

私はこの関数に「何」を渡すとのみ[ 'は、StepOneを許可することができますから、それを防ぐにはどうすればよいです'、' stepTwo '、' stepThree ']?

私も列挙型でそれを実行しようとしましたが、あなたが探しているもの

答えて

8

...あなたは、インデックスの署名として列挙型を使用することができないことが判明したが(今週実施されているkeyofオペレータであり、はい、そうです)。それは準備ができたら、それは次のようになります。

function markStepDone (step: keyof Steps) { 
    steps[step] = true; 
} 

を別の名前(keysof)による早期PRはここにある:一方https://github.com/Microsoft/TypeScript/pull/10425

stringは概算、または手書きのタイプです"stepOne" | "stepTwo" | "stepThree"は、あなたに正確なふるまいをあなたに与えますkeyof Steps

+1

ありがとう! 'keyof'が出るまで、私はこのようなことをしました: ' type AllSteps = 'stepOne' | 'stepTwo' | 'stepThree'; インターフェイス手順{ [index:string]:ブール値。 } function markStepDone(ステップ:AllSteps){' – Sergey

関連する問題