【发布时间】:2021-05-14 13:49:50
【问题描述】:
如何在 TypeScript 中为 object 获得类型保护?
我有任何输入的检查功能:
export function isObject(input: any) :input is Record<string,any> {
return (input !== null) && (typeof input === 'object');
}
但是当我这样使用它时,编译器不会将我检查的变量视为所需的类型:
const constants = {};
const haveConstantsObj = isObject(constants);
// for constants: Object is possibly 'null'.ts(2531)
if (haveConstantsObj && !constants.householdType) {
console.log('hey');
}
我做错了什么?
【问题讨论】:
-
坦率地说,我不知道你为什么首先在这里有一个类型保护。
constants是用const声明的,所以它不可能是null。这是一个简化的例子吗?如果没有,您可以简单地提供声明:const constants: Record<string,any> = {};。更好的是,让constants实现一个接口interface Consts { householdType ?: <your type here> }不是更好吗? -
@OlegValter 这个例子很简单,是的。
constants实际上是异步填充数据的,我需要检查它是否存在。一个不那么抽象的类型在这里可能会有所帮助,但对于像isObject这样的对 smth 的必要检查没有帮助。 -
这么想,感谢您的澄清 - 顺便说一句,
constants对象是否有可能是null或object以外的类型?想建议使用内联if(constants)守卫来简化事情,但您已经在 cmets 中提到它(据我记得,手册鼓励在可能的情况下使用内联守卫)。
标签: typescript typeguards