我使用Typescript已经有一段时间了,目前正在使用具有以下形式的类型别名:
type Animal = "cat" | "dog";
let a1_end = "at";
let a1: Animal = `c${a1_end}`
据我所知,只有值“cat”或“dog”才能被允许用于任何类型为Animal的变量。但严格地说,这应该是可能的,因为结果将是“cat”,对吗?我只是问,因为我得到的错误,任何类型为Animal的变量的唯一允许的值可以是“cat”或“dog”,当我运行这段代码。
我使用Typescript已经有一段时间了,目前正在使用具有以下形式的类型别名:
type Animal = "cat" | "dog";
let a1_end = "at";
let a1: Animal = `c${a1_end}`
据我所知,只有值“cat”或“dog”才能被允许用于任何类型为Animal的变量。但严格地说,这应该是可能的,因为结果将是“cat”,对吗?我只是问,因为我得到的错误,任何类型为Animal的变量的唯一允许的值可以是“cat”或“dog”,当我运行这段代码。
2条答案
按热度按时间cidc1ykv1#
问题是
a1_end
的类型被推断为 string。所以这里使用字符串实际上产生了一个不能赋值给
"cat"
的类型:由于
c${string}
不能赋值给"cat"
,所以会得到一个错误(因为任何以“c”开头的字符串都不能赋值给字符串“cat”)。如果您以任何方式注解该类型或告诉TypeScript
a1_end
的类型是"at"
,它都可以工作:Playground
gzszwxb42#
因为你把
c${string}
赋给变量a1,变量a1是动物类型,所以你得到了错误。(因为类型'c${string}
'不能赋给类型'Animal'。)我的意思是任何以' c '开头的字符串都不能赋给字符串"cat"如果您对类型进行注解或者
a1_end
的类型为"at",那么您的脚本将在TypeScript中工作解决方案:
1.最简单的方法是用const声明a1_end
使用上面的解决方案,您可以轻松地将类型"at"分配给
a1_end
如果你想继续用
let
声明变量,只需按照第二个解决方案1.将"at"类型分配到
a1_end
中或
要了解更多关于TypeScript中类型别名的信息,我推荐阅读本文https://www.digitalocean.com/community/tutorials/typescript-type-alias