-
Notifications
You must be signed in to change notification settings - Fork 0
guards.Function.isInferObj
github-actions[bot] edited this page Jun 8, 2026
·
2 revisions
@zenstone/ts-utils / guards / isInferObj
isInferObj<
T>(obj,fn?):obj is T
Defined in: src/guards/index.ts:228
检查 obj 是否为 Object,结果为真时,推导 obj 为 T 类型
- 未指定泛型 T,则 T 默认为
Record<string, unknown> - 如果指定泛型 T ,而未传入 fn ,只要 obj 是 Object 即推断 obj 为 T
type TestA = {
name?: string;
}
if (isInferObj<TestA>(obj)) {
// obj 推断为 TestA
console.log(obj.name || 'noname');
}- 若果传入了 fn ,则先检查是否 Object,再附加 fn 结果进行推断
type TestB = {
name: string;
}
if (isInferObj<TestB>(obj, it => typeof it.name === 'string')) {
// obj 推断为 TestB
console.log(obj.name);
}- 通过传入
x is T的 fn ,可省略指定泛型 T(一般用于复杂的结构判定)
// 由 fn 的结果推导 isInferObj 的 T
type WithVersion = {
version: number;
};
const isWithVersion = (it: WithVersion): it is WithVersion =>
typeof it.version === 'number';
const ver1 = { ver: 1 };
const ver2 = { version: 2 };
if (isInferObj(ver1, isWithVersion)) {
// 不符合
}
if (isInferObj(ver2, isWithVersion)) {
// ver2 推断为 Version
ver2.version += 1;
}T = RecordObj
unknown
任意类型变量
(it) => boolean
断言类型判断函数
obj is T