Typescript:如何使用泛型指示属性可以为null



想象一下,我有一个名为Person的类型,适用于有工作或没有工作的人。如果有工作的人,需要提供通过传递Job泛型而变化的工作详细信息。

理想情况下,我认为这应该起作用:type Person<Job = undefined> = { name: string, job: Job extends undefined? never : Job },但不是。

我必须像这样编码:type People<Job = undefined> = Job extends undefined ? { name: string } : { name: string, job: Job }才能工作,这很冗长。

有人能给出更好的解决方案吗?谢谢请查看此游乐场或阅读以下内容:

type Teacher = { school: string }
type Engineer = { company: string }
type Job = Teacher | Engineer
// type People<Job = undefined> = Job extends undefined ? { name: string } : { name: string, job: Job }   // passed, but a lot verbose
type Person<Job = undefined> = { name: string, job: Job extends undefined? never : Job  }                 // error: personWithoutJob missing job 

const personWithoutJob: Person = { name: 'Ron' } 
const personWithJob: Person<Teacher> = { name: 'Angela', job: { school: 'a' } }

一个好的方法是交集类型。

像这样:

type Person<Job = undefined> = { name: string } & (Job extends undefined ? {} : { job: Job });

更新的操场

官方交叉口类型文件

最新更新