typeof
в JavaScript, и TypeScript не возвращает имя класса или имя конструктора, но возвращает только native JavaScript значение-типа-имени, которое только один из:
'string'
'number'
'bigint'
'boolean'
'symbol'
'undefined'
'object' // Note that `typeof aNullVar` evalutes to `'object'` btw.
'function'
То, что вы хотите, это TypeScript защита типа функция , которая используется для проверки типа во время выполнения, что компилятор будет "доверять" для обеспечения безопасности типов.
Обратите внимание, что тип возвращаемого значения isAppError
ниже value is AppError
.
Например:
function isAppError( value: string | AppError ): value is AppError {
return typeof value === 'object'
&& ( value !== null )
&& ( 'message' in value )
&& ( 'errorCode' in value )
&& ( typeof (value as AppError).errorCode === 'number' );
}
This isAppError
Функция, вероятно, может быть упрощена (например, вам не нужна проверка value !=== null
, если вы находитесь в строгом режиме.
И используется так:
if( isAppError( result3 ) ) {
// TypeScript *knows* that `result3` is of-type `AppError` inside this `if` statement's scope.
console.log( result3.errorCode ); // TypeScript knows that result3 is AppError here.
}
else {
// If `result3`'s type is an intersection type of only 2 types then TypeScript *knows& that result3 is of-type `string` inside this `else` statement's scope.
console.log( result3.substring(1) ); // TypeScript knows that result3 is string here.
}