You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何设置数组类型使其元素为指定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;
};

说明

  1. 数组类型(keyof MyStuff)[]等效于Array<keyof MyStuff>,可以严格限制数组只能填入MyStuff的键名,写入不符合的键时TS会直接抛出类型错误,满足你的需求。
  2. 你之前遇到Type 'boolean' is not assignable to type 'never'的报错,是因为当MyStuff存在多个不同类型的属性时,TS会把索引访问得到的属性类型推断为所有属性类型的联合,直接赋值固定类型的值会触发类型校验失败。用Record<keyof MyStuff, boolean>做类型断言比any安全得多,相当于你明确告知TS当前操作的对象所有键对应的值都是布尔类型,没有放宽所有类型校验。

内容的提问来源于stack exchange,提问作者Meh.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 22:45:04