Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript定义只能包含特定字符串的数组_Typescript - Fatal编程技术网

Typescript定义只能包含特定字符串的数组

Typescript定义只能包含特定字符串的数组,typescript,Typescript,我不明白为什么下面的错误,我有字符接口 interface Character { race: "ORC" | "ELF" | "HUMAN" | "DWARF" } 和另一个接口酒馆 interface Tavern { races: Character['race'][] } 这里的想法是种族是一个字符串数组,只能是“兽人”、“精灵”、“人类”、“矮人” 由于某种原因,当我像这样使用它时,会出现一个错误 const tavern: Tavern = { races: ["OR

我不明白为什么下面的错误,我有字符接口

interface Character {
 race: "ORC" | "ELF" | "HUMAN" | "DWARF"
}
和另一个接口酒馆

interface Tavern {
  races: Character['race'][]
}
这里的想法是种族是一个字符串数组,只能是“兽人”、“精灵”、“人类”、“矮人”

由于某种原因,当我像这样使用它时,会出现一个错误

const tavern: Tavern = {
   races: ["ORC", "ELF", "HUMAN", "DWARF"]
}
错误如下所示

[ts]类型“{races:string[]}”不可分配给类型“Tavern”。 属性“种族”的类型不兼容。 类型“string[]”不可分配给类型“(“HUMAN”|“ORC”|“ELF”|“DWARF”)[]”。 类型“string”不能分配给类型“HUMAN”|“ORC”|“ELF”|“DWARF”


这是一个古老的打字脚本故事,您很可能必须这样做:

const tavern: Tavern = {
   races: ["ORC", "ELF", "HUMAN", "DWARF"] as Array<Character['race']>
}
这应该行得通

enum Race = { ORC, ELF }

interface Tavern {
  races: Race[]
}

const tavern: Tavern = {
   races: [Race.ORC, Race.ELF]
}

2.9.2,非常奇怪,我不确定还有什么可能导致这个错误,我会进一步调查。是的,我也没有发现你的确切代码有任何错误。我打算建议使用一个helpers函数来推断文本类型,而不是
string
,但是este正在做一些事情,第一个做到了这一点。您是否可以参考任何源代码或github问题来更深入地探讨这一点?我不确定是否有任何参考,但问题是typescripts最初将数组视为常规的
string[]
。顺便说一句,我已经更新了答案-枚举可能是一个不错的选择,如果您想与其他系统进行正常的互操作,它们可以保存值,如
ORC=“ORC”
enum Race = { ORC, ELF }

interface Tavern {
  races: Race[]
}

const tavern: Tavern = {
   races: [Race.ORC, Race.ELF]
}