这个
in
运算符只是缩小变量类型的一种方法。你可以用任何你喜欢的支票写类型保护:
type JSONPrimitive = number | string | boolean | null;
function isJsonPrimitive(x: any): x is JSONPrimitive {
return x === null
|| typeof x === 'number'
|| typeof x === 'string'
|| typeof x === 'boolean';
}
interface TreeNode {
value: number;
left: TreeNode | null;
right: TreeNode | null;
}
type InternalNode = TreeNode & ({ left: TreeNode } | { right: TreeNode });
function isInternalNode(node: TreeNode): node is InternalNode {
return node.left !== null || node.right !== null;
}
使用
在里面
也就是说,用户定义的类型保护类似于
type assertions
,在该类型脚本中不检查它们的正确性。因此,您可以在类型保护的实现中使用任何您喜欢的逻辑;甚至是无条件的
return true;