Def*_*mat 1 union typescript conditional-types
我有一个简单的问题:是否可以在 TypeScript 中获取联合的一部分的类型?
例如,您可以经常使用这样的查找类型:
interface Person {
name: string;
}
type Name = Person['name']
Run Code Online (Sandbox Code Playgroud)
现在,我假设这样的工会是不可能的:
type Entity =
{ __type: 'Company', name: string }
| { __type: 'Employee', firstName: string };
Run Code Online (Sandbox Code Playgroud)
那么,有没有什么办法可以获取工会的一部分呢?像这样的东西:
type Company = DoTheMagic<Entity, { __type: 'Employee' }>
const company: Company = ...;
console.log(company.name) // OK
console.log(company.firstName) // Compile error
Run Code Online (Sandbox Code Playgroud)
我们可以使用条件类型Extract<T, U>。如果T是联合,则结果Extract将是T满足约束的联合的所有成员U(又名,T extends U)
type Company = Extract<Entity, { __type: 'Employee' }>
// Same as
type Company = {
__type: "Employee";
firstName: string;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
340 次 |
| 最近记录: |