【发布时间】:2020-10-31 19:01:34
【问题描述】:
我在使用泛型时遇到了一些麻烦,希望得到一些指导。 有一个工作示例available here。此示例旨在使示例保持简单。
我原以为Transformer 类型中的T 可以毫无问题地推断出来,但事实并非如此。
Transformer 返回 T | K 的原因是转换器默认为 identity 函数
const multiply = (a: number) => (b: number) => a * b;
const identity = <T extends any>(a: T) => a;
const toInt = (a: string) => parseInt(a, 10);
const by10 = multiply(10);
type Transformer = <T, K>(value: T) => T | K;
const renderContent = (
value: string | number,
transformer: Transformer = identity
) => {
const transformed = transformer(value);
console.log(transformed);
return transformed;
};
renderContent(50, by10); // Type 'T' is not assignable to type 'number'
renderContent("50", toInt); // Type 'T' is not assignable to type 'string'
【问题讨论】:
-
第一个错误:你的
Transformer类型不是通用的。它必须声明为type Transformer<T, K>。其次 - 你的renderContent也不是通用的,它可能应该有一个<T extends (string|number)>通用参数。第三:K是什么类型?第四:const identity = <T>(a: T) => a; -
您在寻找this吗?
标签: typescript typescript-typings typescript2.0 typescript-generics