假设我们有一个简单的示例:
interface Steps {
stepOne?: boolean;
stepTwo?: boolean;
stepThree?: boolean;
}
let steps: Steps = {};
function markStepDone (step: ???) {
steps[step] = true;
}
markStepDone('anything');
如何防止它允许将“任何内容”传递给该函数并仅允许['stepOne','stepTwo','stepThree']?
我也尝试用enum做到这一点,但事实证明您不能将enum用作索引签名...
最佳答案
您正在寻找的是keyof
运算符,该运算符将于本周实现(是的,是的)。准备就绪后,它将看起来像这样:
function markStepDone (step: keyof Steps) {
steps[step] = true;
}
其他名称(keysof)的早期公关在这里:https://github.com/Microsoft/TypeScript/pull/10425
同时,
string
是一个大概的近似值,或者手写类型"stepOne" | "stepTwo" | "stepThree"
将为您提供keyof Steps
的确切行为关于 typescript :函数声明中接口(interface)属性的类型安全,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40242998/