type ParamsA = { test: string }
type ParamsB = { test: number }
interface Base {
create(params: unknown): void
}
class PageA implements Base {
create(p: ParamsA) {
}
}
class PageB implements Base {
create(p: ParamsB) {
}
}
let a = 1
const e = a > 1 ? new PageA() : new PageB()
e.create({ test: '1' })
这里的 create
方法参数的类型理想状态下应该是 ParamsA | ParamsB
,这里为什么会是 ParamsA & ParamsB
因为
ts
不知道e
究竟是PageA
还是PageB
,所以传入的参数必需同时对两种情况都有效,只能取两个实现的并集