How can I cast custom type to primitive type?
Solution 1
Try:
myRating as unknown as number
Also, remove | number
from your declaration.
Explanation:
You cannot cast from a custom to a primitive without erasing the type first. unknown
erases the type checking.
Solution 2
Update 2020
TS 3.8 update
now no need to cast using as, it is supported implicitly except in some cases. Where you can do type conversion as given in the accepted answer. Here is a good explanation of type conversion on the typescript.
type Rating = 0 | 1 | 2 | 3 | 4 | 5;
let myRating:Rating = 4
let rate:number = myRating;
Original Answer
I think it is fixed in the typescript update TS 3.5.1
type Rating = 0 | 1 | 2 | 3 | 4 | 5;
let myRating:Rating = 4
Now
let rate:number = myRating;
and
let rate:number = myRating as number;
both working fine.
Siraj Alam
Computer Science is in my DNA. You can share my knowledge on my personal blog garbagevalue designed and developed by myself.
Updated on July 05, 2022Comments
-
Siraj Alam almost 2 years
I have a type
type Rating = 0 | 1 | 2 | 3 | 4 | 5 | number
Now I want to do something like this.
let myRating:Rating = 4 let rate:number = myRating as number
How can I cast my
myRating
intonumber
primitive type?It is giving me error as:
Conversion of type 'Rating' to type 'number' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.ts(2352)
I have been through this, but what I want is its reverse
Edit:
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 version: 3.2.1
-
Jason Foglia over 3 yearsI ran into this recently when trying covariance. This solution just doesn't seem right. But it works.
-
Steven Spungin over 3 yearsYou can't cast from a custom to a primitive without 'erasing' the type first.
unknown
erases the type checking.