Javascript 如何将自定义类型强制转换为基元类型?

Javascript 如何将自定义类型强制转换为基元类型?,javascript,typescript,types,casting,Javascript,Typescript,Types,Casting,我有一种 type Rating = 0 | 1 | 2 | 3 | 4 | 5 | number 现在我想做这样的事情 let myRating:Rating = 4 let rate:number = myRating as number 如何将我的myRating转换为number基本类型 它给我的错误是: 将“评级”类型转换为“编号”类型可能是错误的,因为两种类型都没有充分重叠。如果这是有意的,请首先将表达式转换为“未知”。ts(2352) 我经历过,但我想要的是它的反面 编辑: t

我有一种

type Rating = 0 | 1 | 2 | 3 | 4 | 5 | number
现在我想做这样的事情

let myRating:Rating = 4
let rate:number = myRating as number
如何将我的
myRating
转换为
number
基本类型

它给我的错误是:

将“评级”类型转换为“编号”类型可能是错误的,因为两种类型都没有充分重叠。如果这是有意的,请首先将表达式转换为“未知”。ts(2352)

我经历过,但我想要的是它的反面

编辑:

tsconfig.json

tsc版本:3.2.1

myRating as unknown as number
另外,从您的声明中删除编号。

更新2020 TS 3.8更新

现在不需要使用as进行强制转换,除了在某些情况下,它是隐式支持的。您可以按照接受的答案进行类型转换。这是一个很好的解释


原始答案 我认为它已在typescript更新TS 3.5.1中修复

type Rating = 0 | 1 | 2 | 3 | 4 | 5;
let myRating:Rating = 4
现在

两个都很好


您使用的是哪种类型的脚本版本?另外,请共享您的tsconfig文件,因为您的代码使用
typescript@3.2.2
@NitzanTomer我已经更新了我的问题对不起,但是如果你在你的类型
评分中包含类型
数字
,为什么还要麻烦把数字列表设置为0-5呢?这很有效,这是因为库评级和我的类型名称评级之间存在名称冲突,我将我的类型重命名为RatingType,它成功了。我无法复制此结果,使用您的tsconfig它编译得很好。我最近在尝试“协方差”时遇到了此问题。这个解决方案似乎并不正确。但它是有效的。如果不先“擦除”类型,就不能从自定义转换为基元<代码>未知
清除类型检查。
type Rating = 0 | 1 | 2 | 3 | 4 | 5;
let myRating:Rating = 4
let rate:number = myRating;
type Rating = 0 | 1 | 2 | 3 | 4 | 5;
let myRating:Rating = 4
let rate:number = myRating;
let rate:number = myRating as number;