Мне нравится простота этого.
Number.isNaN(Number(value))
Вышеупомянутый обычный Javascript, но я использую его в сочетании с типом типа typeguard для проверки интеллектуального типа. Это очень полезно для компилятора typescript, чтобы дать вам правильную intellisense и никаких ошибок типа.
isNotNumber(value: string | number): value is string {
return Number.isNaN(Number(this.smartImageWidth));
}
isNumber(value: string | number): value is number {
return Number.isNaN(Number(this.smartImageWidth)) === false;
}
Допустим, у вас есть свойство width
, которое является number | string
. Вы можете захотеть сделать логику на основе того, является ли она строкой.
var width: number|string;
width = "100vw";
if (isNotNumber(width))
{
// the compiler knows that width here must be a string
if (width.endsWith('vw'))
{
// we have a 'width' such as 100vw
}
}
else
{
// the compiler is smart and knows width here must be number
var doubleWidth = width * 2;
}
Типная защита достаточно умна, чтобы ограничить тип width
внутри оператора if
ТОЛЬКО string
, Это позволяет компилятору разрешить width.endsWith(...)
, который он не допустил бы, если бы этот тип был string | number
.
Вы можете вызвать тип защиты, какой вы хотите isNotNumber
, isNumber
, isString
, isNotString
, но я думаю, что isString
неоднозначно и труднее читать.