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

如何实现TypeScript元组自动推断?指定键为元组其余为布尔值

解决方案

你当前的类型定义存在冲突问题:索引签名[key: string]: boolean要求所有键的类型必须是boolean,但a的类型是元组,这在严格模式下会触发TypeScript报错。下面提供两种无需手动全量定义对象类型的实现方式:

方法一:交叉类型约束

通过交叉类型明确指定a的类型,同时约束其余所有字符串键的类型为boolean,避免类型冲突:

type ErrState = { a: [boolean, string] } & Record<Exclude<string, 'a'>, boolean>;

const inicialErrState: ErrState = {
  a: [false, ''],
  b: false,
  c: false,
  d: false,
  // 新增键如e: true也会自动符合类型约束
};

这里Exclude<string, 'a'>确保索引签名仅对除a之外的键生效,完美规避类型冲突。

方法二:泛型辅助函数自动推断

如果不想手动定义类型,可借助泛型函数让TypeScript自动推断对象结构,同时强制类型约束:

function createErrState<T extends { a: [boolean, string] } & Record<Exclude<keyof T, 'a'>, boolean>>(obj: T) {
  return obj;
}

const inicialErrState = createErrState({
  a: [false, ''],
  b: false,
  c: false,
  d: false,
});

这种方式下,新增任意键时只要类型是boolean就会被自动认可,若给非a的键传入非boolean值,TypeScript会直接报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:45:40