代码之家  ›  专栏  ›  技术社区  ›  njord

基于函数的Typescript返回类型

  •  0
  • njord  · 技术社区  · 5 月前

    有没有办法避免重复 <number> <string> fn1 fn2 调用泛型函数时的签名?

    interface Result<T> {
      data: T
    }
    
    type ActionResponse<T> = Result<T>;
    
    function fn1(): ActionResponse<number> {
      return {
        data: 1,
      };
    }
    
    function fn2(): ActionResponse<string> {
      return {
        data: '1',
      };  
    }
    
    function generic<T>(fn: () => ActionResponse<T>): T {
      const response = fn();
      return response.data;
    }
    
    const res1 = generic<number>(fn1);
    const res2 = generic<string>(fn2);
    
    1 回复  |  直到 5 月前
        1
  •  2
  •   Tim Moore    5 月前

    您可以简单地省略type参数并允许推断它:

    const res1 = generic(fn1);
    const res2 = generic(fn2);
    

    查看完整示例 https://tsplay.dev/WYpAdm


    类型推断在以下文档中进行了解释 Generics :

    一旦我们编写了泛型恒等式函数,我们可以通过以下两种方式之一调用它。第一种方法是将所有参数(包括类型参数)传递给函数:

    let output = identity<string>("myString");
    

    在这里,我们明确地设置 Type 成为 string 作为函数调用的参数之一,用 <> 围绕争论而不是 () .

    第二种方式可能也是最常见的。在这里我们使用 类型参数推断 也就是说,我们希望编译器设置以下值 类型 根据我们传递的参数类型自动为我们提供:

    let output = identity("myString");
    

    请注意,我们不必在尖括号中显式传递类型( <> );编译器只是查看了该值 "myString" ,并设置 类型 它的类型。虽然类型参数推断可以是一个有用的工具,可以使代码更短、更易读,但当编译器无法推断类型时,您可能需要显式地传递类型参数,就像我们在前面的例子中所做的那样,这在更复杂的例子中可能会发生。