[英]Specify return type in Typescript
我想巧妙地从 function 返回数据时缩小类型(希望不使用 if 语句等)
我有以下代码
enum TypeData {
Data1 = 'data1',
Data2 = 'data2',
Data3 = 'data3',
}
type DataType = {
[TypeData.Data1]: {d1: number};
[TypeData.Data2]: {d2: string};
[TypeData.Data3]: {d3: number};
}
type Child = DataType[TypeData]
const dataType: DataType = {
[TypeData.Data1]: {d1: 1},
[TypeData.Data2]: {d2: 2},
[TypeData.Data3]: {d3: 3},
}
const getChild = (typeData: TypeData): Child => {
return dataType[typeData]
}
const data = getChild(TypeData.Data2)
代码中function返回的是Child
类型,但是Child
类型表示like
type Child = {
d3: number;
} | {
d1: string;
} | {
d2: number;
}
而不是像{ d3: number }
这样的特定数据类型。 如何使指定返回数据类型而不是所有类型的联合成为可能?
您必须使用 TypeScript Generics 才能根据给定的输入返回正确的类型。 像这样:
enum TypeData {
Data1 = 'data1',
Data2 = 'data2',
Data3 = 'data3',
}
type DataType = {
[TypeData.Data1]: {d1: number};
[TypeData.Data2]: {d2: number};
[TypeData.Data3]: {d3: number};
}
const dataType: DataType = {
[TypeData.Data1]: {d1: 1},
[TypeData.Data2]: {d2: 2},
[TypeData.Data3]: {d3: 3},
}
const getChild = <T extends TypeData>(typeData: T): DataType[T] => {
return dataType[typeData]
}
const data = getChild(TypeData.Data2)
看这里
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.