У меня есть следующая функция в моем приложении, которая утка вводит объект ввода:
export const isMyType = (arg: unknown): arg is MyType => {
return (
arg != null &&
typeof arg === 'object' &&
'prop1' in arg &&
'prop2' in arg &&
'prop3' in arg
);
};
Здесь репродукция игровой площадки Typescript.
Раньше я использовал Typescript 3.9.7, и эта функция работала нормально. Недавно я обновился до Typescript 4.0.5, и в строке 5 отображается ошибка компиляции: возможно, объект «null».ts(2531). Я ожидаю, что null
обрабатывается в строке 3, но, видимо, это не так. Я также пытался добавить следующее, чтобы запустить свою функцию, но безрезультатно:
if (arg == null) {
return false;
}
Мои ошибки в приложении no-non-null-assertions
, поэтому я не могу просто добавить !
после arg
, чтобы исправить это.
Как я могу справиться с этой ошибкой null
?
Я предполагаю, что условное выражение использует последнюю проверку типа, и typeof arg === 'object'
утверждает, что это объект, допускающий значение NULL. Я сделал следующее изменение, которое ему нравится:
export const isMyType = (arg: unknown): arg is MyType => {
return (
typeof arg === 'object' &&
arg != null &&
'prop1' in arg &&
'prop2' in arg &&
'prop3' in arg
);
};
Кажется, это работает.
// I usually have this typeguard laying around
const isObject = (arg:unknown) : arg is object => typeof arg === "object" && arg !== null;
const isMyType = (arg: unknown): arg is MyType => {
return isObject(arg) &&
'prop1' in arg &&
'prop2' in arg &&
'prop3' in arg
};