Narrowing Types
Unions will cause errors if all types don't have a property
Error
function padLeft(padding: number | string, input: string) {
return " ".repeat(padding) + input;
}
/*
Argument of type 'string | number' is not assignable to parameter of type 'number'.
Type 'string' is not assignable to type 'number'.
*/Correct
function padLeft(padding: number | string, input: string) {
if (typeof padding === "number") {
return " ".repeat(padding) + input;
}
return padding + input;
}Guards
Typeof
TypeScript expects this to return a certain set of strings:
"string""number""bigint""boolean""symbol""undefined""object""function"
Boolean
Coerced to false
0NaN""(the empty string)0n(thebigintversion of zero)nullundefined
instanceof
x instanceof Foo checks whether the prototype chain of x contains Foo.prototype
Advanced Types => Type predicates
Way 1
Way 2
Last updated