提问人:Feuermurmel 提问时间:6/23/2023 最后编辑:Feuermurmel 更新时间:6/25/2023 访问量:61
选中 'typeof a === 'object' & a !== null' 后最精确的类型
Most precise type after checking `typeof a === 'object' && a !== null`
问:
我有这个断言函数,它检查传递的值是否是一个对象(根据运算符),但不包括:typeof
null
export function assertIsJavaScriptObjectExceptNull(value: unknown) {
if (typeof value !== 'object' || value === null) {
throw Error('Value is not an object.');
}
}
我想向此函数添加一个断言签名,以便在使用时有助于缩小类型。这里使用的“最正确”类型是什么?
export function assertIsJavaScriptObjectExceptNull(value: unknown): asserts value is <type> {
if (typeof value !== 'object' || value === null) {
throw Error('Value is not an object.');
}
}
是 、 、 还是 、 还是其他什么?{[key: string | number | symbol]: unknown}
Record<keyof unknown, unknown>
Object
我正在寻找与 TypeScript 对这种类型的理解相匹配的类型。我知道 TypeScript 有许多设置可能会对此产生轻微影响,并且 JavaScript 引擎存在怪癖和错误,可能会导致与这种理解相矛盾的结果。所以可能没有一个最佳答案。
答:
2赞
wonderflame
6/23/2023
#1
你要查找的是对象类型,它表示任何非基元类型。请避免使用哪个是 JavaScript 类,建议在官方的 Do's and Don't 中避免使用。Object
object
允许我们确保分配给类型的值不是原始的:
const noError: {toString(): string} = 1
const withError: object & {toString(): string} = 1;
基本上,您可以与任何内容相交,以确保该类型不允许基元值。object
为了更好地理解打字稿中的集合论,请参阅这篇博文
评论
typeof []
"object"
!Array.isArray(value)
value
assertIsObject()
object