如何为函数参数添加类型注解以限定其为指定接口的键?
实现方式:用TypeScript的
keyof操作符限定参数类型 当然可以实现这个类型限定!借助TypeScript的keyof操作符,你能把err参数的类型严格约束为IProductError接口的键值,避免传入无效的字符串。
修改后的完整代码
export interface IProductError { isPriceError: boolean; isAmountError: boolean; isDescriptionError: boolean; } export const getCreateProductsError = (index: number, err: keyof IProductError) => createSelector( getCreateFeatureState, state => state.productsError.getIn([index, err]) );
原理说明
keyof IProductError会生成一个联合类型:"isPriceError" | "isAmountError" | "isDescriptionError",这正是你接口里的所有键名。- 现在当你调用
getCreateProductsError时,TypeScript会自动提示合法的err选项,如果你传入比如"invalidError"这类不在接口里的字符串,编译阶段就会直接报错,大大提升了代码的类型安全性。
这样调整后,既保留了函数的功能,又实现了你想要的类型注解约束。
内容的提问来源于stack exchange,提问作者Noah Bergh




