【问题标题】:Declaring const of generic type声明泛型类型的 const
【发布时间】:2018-12-14 07:41:25
【问题描述】:

为了减少样板,我将某种通用函数接口声明为一种类型。然后我想声明一个这种类型的const。那么,为什么打字稿假定 foo 声明是合法的而 bar 不是?这些声明实际上不是相同的吗?打字稿缺少简单的功能还是我遗漏了一些细节?如果我不想明确重复FunctionType 接口,是否有任何解决方法?

type FunctionType<TValue> = (value: TValue) => void;

const foo = <TValue>(value: TValue): void => {
}

//const bar: FunctionType<TValue> = (value) => { // Cannot find name 'TValue'
//}

【问题讨论】:

    标签: typescript types


    【解决方案1】:

    恰好是函数的泛型类型和作为泛型函数的类型之间是有区别的。

    你在那里定义的是一个泛型类型,它是一个函数。这意味着我们可以将它分配给具有指定泛型类型的 const:

    type FunctionType<TValue> = (value: TValue) => void;
    const bar: FunctionType<number> = (value) => { // value is number
    }
    

    要定义一个泛型函数类型,我们需要将类型参数放在参数列表之前

    type FunctionType = <TValue>(value: TValue) => void;
    const bar: FunctionType = <TValue>(value) => { // generic function
    }
    

    【讨论】:

    • @Hyster 一个变量不能是通用的,所以我不确定你在问什么......
    • 看看这个例子:const genericFunction = createGenericFunction() - createGenericFunction 返回一个通用函数 (xD),我希望能够为 genericFunction 常量编写一个类型并保持它的通用的。看看下面的答案。
    【解决方案2】:

    我一直在尝试解决同样的问题,尤其是当我使用返回其他通用函数(或组件)的高阶函数(或 React 组件)时。我找到了以下解决方案:

    interface GenericFunctionType {
        <T>(x: T): string
    }
    
    const genericFunction: GenericFunctionType = (x) => `doSomething with X ${x}`
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-14
      • 2019-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多