声明泛型类型的 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的主要内容,如果未能解决你的问题,请参考以下文章