我有以下界面

interface Test {
    data: 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.OTHER赋给data,这是我的用例,我有几个元组要赋给数据.

我不能赋值它,因为当我try 赋值只读元组时,它只接受字符串[]

有没有更好的方法来做这件事?

https://www.typescriptlang.org/play?ssl=12&ssc=2&pln=1&pc=1#code/JYOwLgpgTgZghgYwgAgCoQM5mQbwFDKHIAmcYcAXMllKAOYDaAungL554ID2IWyAIgEFUggPoAZAJIBlVMgC8uAkQCq0gKIAlKgwBEGLgFsUNerqYAaZYQDyqABJad+oyi5gAFtGphaIOroWyLpQcCDERsgAbnAANgCuEIHBEGAI5mzIcBjI3LxgANwceXyQfFTofIr4RCRklALCYlKyAHR2jppsQA

推荐答案

根本问题很简单:

The type 'readonly ["some other string", "random value", "etc"]' is 'readonly' and cannot be assigned to the mutable type 'string[]'.

...这意味着你不能把string[]分分配给readonly string[]分.

如果您想在其他时间点重新分配test.data,那么您可以简单地执行data: [...DATA_LIST.OTHER],这将go 掉readonly方面,并允许您将其分配给简单的string[]属性.

如果不希望重新分配test.data,可以将属性的类型更改为readonly string[]string[] | readonly string[].

Typescript相关问答推荐

如何传递基于TypScript中可变类型的类型?

Typescript:将内部函数参数推断为子对象键的类型

防止获取发出不需要的请求

使用带有RxJS主题的服务在Angular中的组件之间传递数据

TypeScript类型不匹配:在返回类型中处理已经声明的Promise Wrapper

如何通过TypeScript中的工厂函数将区分的联合映射到具体的类型(如类)?

为什么在这个例子中,我把缺少的属性添加到对象中时,TypeScrip没有拾取,如何修复?

嵌套对象的类型

ANGLE独立组件布线错误:没有ActivatedRouting提供程序

如何在处理数组时缩小几个派生类实例之间的类型范围?

如何避免推断空数组

如何使用模板继承从子组件填充基础组件的画布

我可以使用typeof来强制执行某些字符串吗

基于未定义属性的条件属性

react 路由不响应参数

为什么在这种情况下,打字脚本泛型无法正确自动完成?

为什么受歧视的unions 在一种情况下运作良好,但在另一种非常类似的情况下却不起作用?

为什么`map()`返回类型不能维护与输入相同数量的值?

如何为字符串模板文字创建类型保护

React router - 如何处理嵌套路由?