【发布时间】:2020-08-06 15:56:52
【问题描述】:
我不确定这是 TS 中的错误还是他们认为不受支持的功能。 MVE:
interface ColumnOptions<R> {
valueFormatter(params: R): string;
valueGetter(params: string): R;
}
const getColumn = function<R>(options: ColumnOptions<R>) {};
getColumn({
valueFormatter: params => 'hello',
valueGetter: params => ({
nr: 1,
str: 'hello',
}),
});
这是针对 Ag-grid 列定义的,目的是推断valueFormatter 的参数来自valueGetter 的返回类型。 valueFormatter(R)的参数在上述情况下被推断为unknown,但是如果我显式键入或删除valueGetter的参数,像这样:
getColumn({
valueFormatter: params => 'hello',
valueGetter: () => ({
nr: 1,
str: 'hello',
}),
});
它正确地推断出 R。这就是让我认为它可能是 TS 中的错误的原因,但也许它只是不受支持,如果是这种情况,我不想在 GitHub 上打开问题。通过 TS 3.8、3.7、3.5 和 3.0 测试
【问题讨论】:
-
我认为
params在第一种情况下是any,因此valueGetter(params: string): R不匹配valueGetter(params: any): infer -
如果我没有明确输入
valueGetter声明,它会正确推断参数的类型为字符串,来自ColumnOptions
标签: javascript typescript type-inference