gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 18:50:31 25 4
gpt4 key购买 nike

回复 this question解决方案是在 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 .
一般在这种情况下,有没有办法告诉 TypeScript 从被分配的值的类型参数(在本例中为 ReadonlyMap)推断变量/常量类型(在本例中为 Map)的类型参数?我的意思不是针对这种特定情况的解决方案(我想我可能有一个函数,也许是一个从字面上提供只读 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']
]);
playground link
const conditions3: ReadonlyMap<string, any> = new Map<>([
// Same error with no matching overloads the OP had −^^
[FirstName.Alex, 'foo'],
[Lastname.Smith, 'bar']
]);
playground link
const conditions3: ReadonlyMap = new Map<string, any>([
// ^^^^^^^^^^^−−−−− Generic type 'ReadonlyMap<K, V>' requires
// 2 type argument(s).(2314)
[FirstName.Alex, 'foo'],
[Lastname.Smith, 'bar']
]);
playground link
在一般情况下是否可以避免重复?
这是设置代码(所以它在问题中,而不仅仅是链接):
export enum FirstName {
Alex = 'alex',
Bob = 'bob'
}

export enum Lastname {
Smith = 'smith',
Abrams = 'abrams'
}

最佳答案

不幸的是,变量中没有用于部分推断的语法。
唯一的解决方法是使用您在评论中提到的函数:

function roMap<Key, Value>(map: Map<Key, Value>): ReadonlyMap<Key, Value> { return map; } 

const conditions3 = roMap(new Map<string, any>([
[FirstName.Alex, 'foo'],
[Lastname.Smith, 'bar']
]));
Playground Link

关于typescript - 你能让 TS 从被赋值的值中推断出变量的泛型类型参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67003094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com