如何在TypeScript中为数组添加自定义default字段并保留数组特性
解决方案
可以通过Object.assign将数组与包含default属性的对象合并,既保留数组的所有方法和原有类型,又能添加自定义属性,且类型推导完全正确。
基础实现(手动指定默认值)
const array = Object.assign( ["en-US", "en-GB", "en-AU"] as const, { default: "en-US" } );
此时array的类型会被自动推断为:
readonly ["en-US", "en-GB", "en-AU"] & { readonly default: "en-US" }
你可以正常调用数组方法(比如array.find(item => item === "en-GB")),也能直接通过array.default访问默认值,类型提示完全准确。
自动关联数组第一个元素作为默认值
如果不想重复写默认值,可以先定义基础数组,再合并属性:
const baseArray = ["en-US", "en-GB", "en-AU"] as const; const array = Object.assign(baseArray, { default: baseArray[0] });
这样array.default会自动关联数组的第一个元素,因为是const断言,数组内容不可变,类型也会同步保持准确。
原理说明
Object.assign会将第二个参数的属性挂载到第一个数组对象上,运行时完全保留数组的所有内置方法(find、map等)。- TypeScript会自动合并数组的readonly元组类型与自定义属性的类型,确保类型安全,不会丢失原有数组的类型信息。
内容的提问来源于stack exchange,提问作者sshmaxime
相关产品推荐
相关产品推荐

