基于函数参数的条件响应类型

时间:2020-11-03 13:18:17

标签: javascript typescript

我有一个函数调用库中的方法,该函数根据提供给该方法的参数返回不同的数据。

一个简化的示例:

import aMethod from "aLib";

const aParam = "foo"; // or in other cases: "bar";
const response = aMethod(aParam);

如果aParam"foo",则从aMethod返回的响应与我将aParam传递为"bar"时的响应具有不同的形状。例如,response中的someParam === "foo"的形状如下:

type TFooResponse = {
  someObject: object;
  someString: string;
}

如果我通过"bar",则response的形状将是:

type TBarResponse = {
  someArray: array;
}

如果aParam === "foo"使用TFooResponse,否则使用TBarResponse,我应该如何最好地说明〜?

1 个答案:

答案 0 :(得分:1)

我认为您正在寻找类似的东西:

type TType<T extends "foo" | "bar"> = {
    a: T,
    c: T extends "foo" ? TFooType : TBarType
}

或者例如:

function <T extends "foo" | "bar"> aMethod(aParam: T): T extends "foo" ? TFooType : TBarType {
    /**
     * 
     */
}