你能让TS从被赋值的值中推断出变量的泛型类型参数吗?

回答这个问题的解决方案是在Map构造函数上指定类型参数,如下所示:

const conditions3: ReadonlyMap<string, any> = new Map<string, any>([
// ??????????????????????????????????????????????????^^^^^^^^^^^^^
    [FirstName.Alex, 'foo'],
    [Lastname.Smith, 'bar']
]);

请注意,OP 想要提供conditions3类型ReadonlyMap<string, any>,而不仅仅是Map<string, any>; 否则我们可以完全删除类型注释conditions3

不幸的是,这意味着在ReadonlyMap和上重复类型参数Map

一般情况下,有没有办法告诉 TypeScriptReadonlyMap从被赋值的类型参数(在这个例子中)推断变量/const 类型(在这个例子中)的类型参数Map?我的意思不是针对这种特定情况的解决方案(我想我可能有一个函数,也许是一个从字面上提供只读地图的函数,至少在开发版本中),而是一个通用的从目标推断的解决方案?

我的各种幼稚方法都不起作用(前两个受 Java 的启发<>):

const conditions3: ReadonlyMap<> = new Map<string, any>([
//                 ^^^^^^^^^^^^^????? Generic type 'ReadonlyMap<K, V>' requires
//                                    2 type argument(s).(2314)
    [FirstName.Alex, 'foo'],
    [Lastname.Smith, 'bar']
]);

游乐场链接

const conditions3: ReadonlyMap<string, any> = new Map<>([
// Same error with no matching overloads the OP had ?^^
    [FirstName.Alex, 'foo'],
    [Lastname.Smith, 'bar']
]);

游乐场链接

const conditions3: ReadonlyMap = new Map<string, any>([
//                 ^^^^^^^^^^^????? Generic type 'ReadonlyMap<K, V>' requires
//                                  2 type argument(s).(2314)
    [FirstName.Alex, 'foo'],
    [Lastname.Smith, 'bar']
]);

游乐场链接

在一般情况下是否可以避免重复?

这是设置代码(所以它在问题中,而不仅仅是链接):

export enum FirstName {
    Alex = 'alex',
    Bob = 'bob'
}
    
export enum Lastname {
    Smith = 'smith',
    Abrams = 'abrams'
} 

以上是你能让TS从被赋值的值中推断出变量的泛型类型参数吗?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>