我们假设我们有这个简单的例子:
interface Steps {
stepOne?: boolean;
stepTwo?: boolean;
stepThree?: boolean;
}
let steps: Steps = {};
function markStepDone (step: ???) {
steps[step] = true;
}
markStepDone('anything');
我怎样才能阻止它传递任何内容?'这个功能只允许[' stepOne',' stepTwo',' stepThree']?
我也尝试用enum做,但结果证明你不能使用enum作为索引签名......
答案 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