如何将自定义类型转换为原始类型?

Posted

技术标签:

【中文标题】如何将自定义类型转换为原始类型?【英文标题】:How can I cast custom type to primitive type? 【发布时间】:2019-05-17 16:47:47 【问题描述】:

我有一个类型

type Rating = 0 | 1 | 2 | 3 | 4 | 5 | number

现在我想做这样的事情。

let myRating:Rating = 4
let rate:number = myRating as number

如何将我的 myRating 转换为 number 原始类型?

它给我的错误是:

类型 'Rating' 到类型 'number' 的转换可能是一个错误,因为这两种类型都没有与另一种充分重叠。如果这是故意的,请将表达式转换为 'unknown' first.ts(2352)

我已经通过this,但我想要的是它的反向

编辑:

tsconfig.json


  "compilerOptions": 
    "noImplicitAny": false,
    "target": "es6",
    "allowJs": true,
    "skipLibCheck": false,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "forceConsistentCasingInFileNames": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "preserve",
    "strict": true
  ,
  "include": [
    "src"
  ]

tsc 版本:3.2.1

【问题讨论】:

您使用的是哪个打字稿版本?另外,请分享您的 tsconfig 文件,因为您的代码使用 typescript@3.2.2 为我编译而没有错误 @NitzanTomer 我已经更新了我的问题 对不起,如果你在你的类型Rating中包含类型number,为什么还要费心把数字列表放在0-5之间呢? 它成功了,这是因为库 Rating 和我的类型名称 Rating 之间的名称冲突,我将我的类型重命名为 RatingType 并且它有效。 我无法重现这个,使用你的 tsconfig 它编译得很好。 【参考方案1】:

试试:

myRating as unknown as number

另外,从您的声明中删除 | number

说明: 如果不先擦除类型,就不能从custom 转换为primitiveunknown 清除类型检查。

【讨论】:

我最近在尝试协方差时遇到了这个问题。这个解决方案似乎并不正确。但它有效。 如果不先“擦除”类型,就不能从自定义转换为基元。 unknown 清除类型检查。【参考方案2】:

2020 年更新

TS 3.8 更新

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

type Rating = 0 | 1 | 2 | 3 | 4 | 5;
let myRating:Rating = 4
let rate:number = myRating;

TS Playground


原答案

我认为它已在 typescript update TS 3.5.1 中修复

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

现在

let rate:number = myRating;

let rate:number = myRating as number;

两者都工作正常。

TS Playground

【讨论】:

以上是关于如何将自定义类型转换为原始类型?的主要内容,如果未能解决你的问题,请参考以下文章

将自定义类型转换为类型 [][]float64

无法将自定义数据类型转换为字符串?

如何将自定义 json 转换为自适应卡片 json 格式

Doctrine / Symfony:在使用 QueryBuilder 之前将自定义类型转换为数据库值

C++ 将自定义类型的转换运算符重载为 std::string

在 Wordpress 中,如何将自定义帖子类型的默认管理员排序顺序设置为自定义列?