[英]Infer the type of a generic on an interface
这可能是重复的,因为我认为这是一个相对常见的问题,但不幸的是我找不到任何东西。
如果我想定义一个采用泛型的 function,typescript 通常能够推断出泛型的类型:
const f = <T>(x: Record<string, T>) => x;
const x = f({ a: { x: 1 }, b: { x: 1 } });
Typescript这里没有问题,我不需要提供泛型的类型。
但是,如果我尝试在界面中做同样的事情,我就做不到; 我需要明确提供类型:
type X<T> = Record<string, T>;
const x: X = { a: { x: 1 }, b: { x: 1 } };
在某些方面,我可以理解为什么会这样; 我们可以在实际给它一个值之前定义一个变量的类型,所以泛型并不总是可推断的。 但我也不能这样做:
const x = { a: { x: 1 }, b: { x: 1 } } as X;
似乎它是语言语法的一部分,对于类型和接口,您必须显式提供 generics 的类型; 但我错过了什么吗? 任何人都可以提供任何帮助吗?
似乎正在对此进行处理,请参阅issue-26242 ,特别是issue-26242-comment (以及issue-30120 ,它看起来与您的示例非常相似):
也许采用
?
来自部分申请提案
foo<?, ?, string>(); // returns [{}, {}, string]
在 TypeScript 中已经代表
optional
。 实际上, 的含义与提案非常相似,并且可以允许这样的事情:
type Foo<T, U, V> = T | U | V;
type Bar = Foo<?, string, ?>; // equal to type Bar<A, B> = A | string | B;
(我通过搜索 2314 找到了这一点,该错误代码当前由操场 reg 提供。您的代码片段,我之前已成功搜索错误代码)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.