ts类型implements后类型为never?

作者站长头像
站长
· 阅读数 4
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' })

ts类型implements后类型为never?

这里的 create 方法参数的类型理想状态下应该是 ParamsA | ParamsB,这里为什么会是 ParamsA & ParamsB

在线查看代码

回复
1个回答
avatar
test
2024-06-25

因为 ts 不知道 e 究竟是 PageA 还是 PageB,所以传入的参数必需同时对两种情况都有效,只能取两个实现的并集

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容