【问题标题】:Can Typescript automatically detect the types of function arguments and then use those types in the function?Typescript 可以自动检测函数参数的类型,然后在函数中使用这些类型吗?
【发布时间】:2021-02-22 17:54:58
【问题描述】:

为了解释我想要的,这里有一个例子。假设我有一个数组洗牌功能,我希望能够做到这一点:

type shuffleArray = (someType[])=>someType[]

someType 没有在任何地方声明,而是在将参数传递给函数时推断出来,而不必像这样提前传递泛型类型参数:

type shuffleArray<T> = (T[])=>T[]

理想情况下,我可以在函数体内的变量上使用someType。我不知道是否有办法做到这一点,我找不到,但它似乎应该是可行的。

【问题讨论】:

标签: typescript typescript-generics


【解决方案1】:

使用泛型时,您可以这样做:

type MyFunctionType<T> = (param: T) => T[]

确实,每次使用函数时都必须手动指定类型,或者这样:

type MyFunctionType = <T>(param: T) => T[]

在这里你让你的函数推断传递给函数的内容。

更多信息在这里:Required vs inferred generic types in TypeScript

【讨论】:

    【解决方案2】:

    您正在尝试使用泛型而不使用泛型。您应该使用泛型并通过声明包含您要使用的方法的接口来解决问题:

    interface YourType {
      someMethod: () => void;
    }
    
    class YourActualType {
        public someMethod() {
            // Do something
        }
    }
    
    class AnotherType {
        public someMethod() {
            // Do something else
        }
    }
    
    function shuffleArray(values: YourType[]): YourType[] {
        values.forEach(value => value.someMethod());
        return values;
    }
    
    const values = [
        new YourActualType(),
        new AnotherType()
    ];
    
    shuffleArray(values);
    

    Playground link.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-03
      • 1970-01-01
      • 2012-09-23
      • 1970-01-01
      • 2012-10-25
      • 2014-07-07
      • 2016-11-01
      • 2021-11-24
      相关资源
      最近更新 更多