如何创建TypeScript类型支持const只读元组向数组赋值
解决TypeScript只读元组赋值给string[]的问题
方案1:类型断言直接转换
直接将只读元组断言为string[],快速解决类型不兼容问题:
const test : Test = { data: DATA_LIST.OTHER as string[] }
注意:如果后续代码尝试修改test.data(比如test.data.push("new item")),运行时会抛出错误,因为原元组是只读的。仅适用于确定不会修改data字段的场景。
方案2:修改接口兼容只读数组
调整Test接口的data类型为readonly string[],匹配DATA_LIST的只读特性,这是最安全的方案:
interface Test { data: readonly string[] } const DATA_LIST = { USER: ["some string"], OTHER: ["some other string", "random value", "etc"] } as const; const test : Test = { data: DATA_LIST.OTHER }
这种方式既保留了DATA_LIST的只读性,又保证了类型安全,无需额外转换。
方案3:创建新的可变数组
通过扩展运算符...将只读元组转为新的可变数组,得到真正的string[]类型,适合需要修改data字段的场景:
const test : Test = { data: [...DATA_LIST.OTHER] }
新数组完全可写,后续对test.data的修改不会影响原DATA_LIST,也不会触发运行时错误。
内容的提问来源于stack exchange,提问作者Alan Dsilva
相关产品推荐
相关产品推荐

