假设我们有一个简单的示例:

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/

10-11 12:55