如何实现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
相关产品推荐
相关产品推荐

