Typescript:函数声明中接口属性的类型安全性

时间:2016-10-25 14:44:49

标签: typescript

我们假设我们有这个简单的例子:

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

let steps: Steps = {};

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


markStepDone('anything');

我怎样才能阻止它传递任何内容?'这个功能只允许[' stepOne',' stepTwo',' stepThree']?

我也尝试用enum做,但结果证明你不能使用enum作为索引签名......

1 个答案:

答案 0 :(得分: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

的确切行为
相关问题