例如:
interface A {
a: number
}
interface B {
a: number
b: string
}
const X = (x) => {
// 操作。。。
return x
}
参数 x 有可能是 A 或者 B。
如果传入了 A 类型,希望操作后检查到返回 x,如果带属性 b 即错误。
如果传入了 B 类型,希望操作后检查到返回 x,如果不带属性 b 即为错误。
希望返回 x 的类型,断言等于传入的类型。
例如:
interface A {
a: number
}
interface B {
a: number
b: string
}
const X = (x) => {
// 操作。。。
return x
}
参数 x 有可能是 A 或者 B。
如果传入了 A 类型,希望操作后检查到返回 x,如果带属性 b 即错误。
如果传入了 B 类型,希望操作后检查到返回 x,如果不带属性 b 即为错误。
希望返回 x 的类型,断言等于传入的类型。
我表示这个问题我没有看得太明白,你的意思是想问 ts 实现的原理吗?还是如何使用 ts 来达到你说的效果?
如果是前者,这个我就默默地退下了,水平不够。
如果是后者,可以这么来实现:
interface A {
a: any
}
interface B {
a: any
b: any
}
function isB(arg: A | B): arg is B {
return (<B>arg).b !== undefined;
}
function foo(arg: A | B) {
if (isB(arg)) {
// arg is B
console.log(arg.a, arg.b)
} else {
// arg is A
console.log(arg.a)
}
}
如果我理解有误,就无视吧,大神轻喷
手写一个重载可以做到