如何设置数组类型使其元素为指定interface的keyof合法取值?
完整修改后代码
interface MyStuff { key?: boolean; }; var myThing: MyStuff = {}; // 第一处补充:限制数组元素只能是MyStuff的合法键 var MyStuffArray: (keyof MyStuff)[] = []; MyStuffArray.push("key"); for(var p of MyStuffArray) { // 第二处补充:做安全的类型断言,避免any (myThing as Record<keyof MyStuff, boolean>)[p] = true; };
说明
- 数组类型
(keyof MyStuff)[]等效于Array<keyof MyStuff>,可以严格限制数组只能填入MyStuff的键名,写入不符合的键时TS会直接抛出类型错误,满足你的需求。 - 你之前遇到
Type 'boolean' is not assignable to type 'never'的报错,是因为当MyStuff存在多个不同类型的属性时,TS会把索引访问得到的属性类型推断为所有属性类型的联合,直接赋值固定类型的值会触发类型校验失败。用Record<keyof MyStuff, boolean>做类型断言比any安全得多,相当于你明确告知TS当前操作的对象所有键对应的值都是布尔类型,没有放宽所有类型校验。
内容的提问来源于stack exchange,提问作者Meh.
相关产品推荐
相关产品推荐

