繁体   English   中英

推断接口上泛型的类型

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM