typescript 如何创建一个类型脚本类型,以允许从常量只读元组

czfnxgou  于 2023-06-24  发布在  TypeScript
关注(0)|答案(2)|浏览(145)

我有以下接口

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,这是我的用例,我有几个元组要分配给数据。
我无法分配它,因为在我尝试分配只读元组时,它只接受string[]
有没有更好的办法?
https://www.typescriptlang.org/play?ssl=12&ssc=2&pln=1&pc=1#code/JYOwLgpgTgZghgYwgAgCoQM5mQbwFDKHIAmcYcAXMllKAOYDaAungL554ID2IWyAIgEFUggPoAZAJIBlVMgC8uAkQCq0gKIAlKgwBEGLgFsUNerqYAaZYQDyqABJad+oyi5gAFtGphaIOroWyLpQcCDERsgAbnAANgCuEIHBEGAI5mzIcBjI3LxgANwceXyQfFTofIr4RCRklALCYlKyAHR2jppsQA

ttvkxqim

ttvkxqim1#

根本的问题很简单:

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],这将摆脱readonly方面,并允许你分配一个简单的string[]属性。
如果您不希望重新分配test.data,则可以将属性的类型更改为readonly string[]string[] | readonly string[]

whlutmcx

whlutmcx2#

元组是具有固定长度的特定类型,并且每个元素具有特定类型。它不能直接赋值给数组类型。然而,总有一种方法,你可以把它转换成一个数组:

const test: Test = {
  data: Array.from(DATA_LIST.OTHER) 
};

相关问题