繁体   English   中英

在 Typescript 中指定返回类型

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM