javascript - Typescript tilldela en variabel av flera typer som innehåller OR ( | ) till en variabel av en enda typ
Jag har en variabel som har typen nummer eller sträng. Hur kan jag tilldela dess värde till en variabel som endast accepterar nummer?
const id:Record<string, string|number> = {name:3}
let num: Record<string, number>;
num = id; //Shows error here
Jag vet att det kan finnas JavaScript-lösningar som att skriva en konverteringsfunktion, men jag lär mig TypeScript och vill veta om det finns nyckelord eller TypeScript-specifika lösningar som är avsedda att användas i sådana fall, som as Record<string,number>... som kan kasta det, istället för typförklaring
Här är en länk till koden på Typescript-lekplatsen
Svar #1
Det ser ut som att du redan besvarade din fråga, du kan casta med nyckelordet as.
num = id as number
Om du ville vara lite finurlig kunde du kolla id:ets typ med typeof, så något som detta
if (typeof id === 'number') {
number = id
}
Svar #2
Du kan använda TypeScript 3.7:s assertionsfunktioner för att genomdriva kontrollerna i koden som inte eliminerade fel typ:
const id:Record<string, string|number> = {name:"3"}
let num: Record<string,string>;
//the code logic safely leads to this line only if "id" contains a number value
declare function isNumId(id: Record<string, string | number>): asserts id is Record<string, string>;
isNumId(id);
num = id; // No longer shows error here
Självklart kan det vara enklare att bara säga till TS att vi är säkra på typen:
num = id as Record<string, string>; // No longer shows error here
