声明泛型类型的const

时间:2018-07-05 18:31:02

标签: typescript types

试图减少样板,我将某种通用函数接口声明为一种类型。然后,我想声明这种类型的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'
//}

2 个答案:

答案 0 :(得分:12)

碰巧是函数的泛型和泛型类型之间有区别。

您定义的是一个泛型类型,即一个函数。这意味着我们可以将其分配给具有指定泛型类型的const:

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

要定义类型为通用函数,我们需要将type参数放在参数列表之前

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

答案 1 :(得分:0)

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

interface GenericFunctionType {
    <T>(x: T): string
}

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