惯用的打字稿枚举可区分联合
Idiomatic Typescript Enum Discriminated Union
从 typescript 2.0 开始,您可以使用带枚举的可区分联合作为判别式,如下所示:
export function getInstance(code: Enum.Type1, someParam: OtherType1): MyReturnType1;
export function getInstance(code: Enum.Type2, someParam: OtherType2): MyReturnType2;
export function getInstance(code: Enum, someParam: UnionOfOtherTypes): UnionOfReturnTypes {
switch (code) {
case Enum.Type1:
return new ReturnType1(someParam as OtherType1);
case Enum.Type2:
return new ReturnType2(someParam as OtherType2);
}
}
从 TypeScript 2.3 开始
- 这是执行此操作的惯用方法吗?
- 我们是否能够在不强制转换的情况下推断出 someParam 的类型?
- 我们是否可以简化类型定义,也许使用泛型,改变函数参数等,这样我们只需要定义最终函数?
- 是否可以将函数声明为常量,例如:
const getInstance = () => {};
Is this the idiomatic way to do this
没有。如果您需要使用类型断言,例如someParam as OtherType1
不安全。
更多
- 类型断言的不安全性:https://basarat.gitbook.io/typescript/type-system/type-assertion
- 惯用的方法是使用判别属性而不是函数重载。示例:https://basarat.gitbook.io/typescript/type-system/discriminated-unions
从 typescript 2.0 开始,您可以使用带枚举的可区分联合作为判别式,如下所示:
export function getInstance(code: Enum.Type1, someParam: OtherType1): MyReturnType1;
export function getInstance(code: Enum.Type2, someParam: OtherType2): MyReturnType2;
export function getInstance(code: Enum, someParam: UnionOfOtherTypes): UnionOfReturnTypes {
switch (code) {
case Enum.Type1:
return new ReturnType1(someParam as OtherType1);
case Enum.Type2:
return new ReturnType2(someParam as OtherType2);
}
}
从 TypeScript 2.3 开始
- 这是执行此操作的惯用方法吗?
- 我们是否能够在不强制转换的情况下推断出 someParam 的类型?
- 我们是否可以简化类型定义,也许使用泛型,改变函数参数等,这样我们只需要定义最终函数?
- 是否可以将函数声明为常量,例如:
const getInstance = () => {};
Is this the idiomatic way to do this
没有。如果您需要使用类型断言,例如someParam as OtherType1
不安全。
更多
- 类型断言的不安全性:https://basarat.gitbook.io/typescript/type-system/type-assertion
- 惯用的方法是使用判别属性而不是函数重载。示例:https://basarat.gitbook.io/typescript/type-system/discriminated-unions