声明泛型类型的 const

Posted

技术标签:

【中文标题】声明泛型类型的 const【英文标题】:Declaring const of generic type 【发布时间】: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'
//

【问题讨论】:

【参考方案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`

【讨论】:

以上是关于声明泛型类型的 const的主要内容,如果未能解决你的问题,请参考以下文章

Java 泛型泛型用法 ( 泛型类用法 | 泛型方法用法 | 泛型通配符 ? | 泛型安全检查 )

53. 泛型类

泛型类的可选方法参数的类型

Java 无类型泛型类,删除它们的函数泛型类型

20165315 第四次考试课下补做

Java泛型