问题标签 [mapped-types]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
233 浏览

typescript - 部分的仅适用于内联值

为什么下面的代码表现得像这样?它是 TypeScript 编译器中的错误还是缺少功能?

我使用了 TypeScript 2.1.6 版

0 投票
1 回答
359 浏览

typescript - 在 TypeScript 中从没有错误的对象创建映射类型

如何从对象创建映射类型?如果我尝试以下操作:

...我得到错误:

类型“{}”不可分配给类型“{ [K in keyof T]: Stats; }'

这似乎是因为 is 中的初始值reduce与接口不匹配。

我可以将我的声明更改为一种解决方法:

...但是现在这意味着 keyof T 的某些值可能根据类型未定义。

鉴于无法在 JavaScript 中创建没有中间结果的映射对象,您如何创建一个完全映射的类型?

0 投票
1 回答
1892 浏览

generics - TypeScript 泛型

我正在为如何使用 TypeScript 强输入某些功能而苦苦挣扎。

本质上,我有一个函数,它接受 DataProviders 的键/值映射并返回从每个返回的数据的键/值映射。这是问题的简化版本:

目前getDataFromProviders有一个返回类型,any但我想要它,这样如果这样调用......

...然后values将被隐式强类型化为:

我想这将涉及返回具有泛型参数的泛型类型,TDataProviders但我无法完全解决。

这是我能想到的最好的,但没有编译...

我正在努力想出一种DataFromDataProvider无需我作为第二个参数显式传入即可编译的类型,TData我认为我做不到。

任何帮助将不胜感激。

0 投票
2 回答
1423 浏览

typescript - TypeScript Mapped Types: Get element type of array

Suppose having a container type with array properties of unknown/generated types T1, T2, etc. (short T*):

Is it possible to derive the following type using maped types:

I'm looking for some expression like:

MultiContainer[P]returns the types T*[] but I need an expression that returns T*

Thanks in advance!

0 投票
1 回答
1152 浏览

typescript - 如何使用映射类型来定义“Object.keys”的类型?

我想Object.keys使用打字稿映射类型定义更严格的函数。

例子:

假设我有一个定义为的对象const

当我Object.keys在这个对象上使用时,返回类型是string[]

问题:

相反,我希望这种类型更具体。string[]我宁愿返回 type ,而不是Object.keys返回 type ("a" | "b")[]

所需类型:

我试过的:

我认为这可以使用typescript mapped types来完成。

我已经定义了一个类型,它断言一个类型是一个对象的值与键相同:

我试图将这个函数实现为一个类型化的包装器Object.keys

有任何想法吗?

0 投票
0 回答
560 浏览

typescript - 用于代理的 TypeScript 映射类型

我想实现一个概念上简单的事情:将返回的函数映射any(或者,为了示例,number)转换为返回的函数映射void,同时保留其他类型信息。

用代码表示,我想做这样的事情:

0 投票
4 回答
18420 浏览

typescript - 如何实现 TypeScript 深度部分映射类型而不破坏数组属性

关于如何递归地将 TypeScript 的 Partial 映射类型应用于接口,同时不破坏任何具有数组返回类型的键的任何想法?

以下方法还不够:

有任何想法吗?

更新:已接受的答案 - 现在是一个更好、更通用的解决方案。

找到了一种临时解决方法,其中涉及类型和两个映射类型的交集,如下所示。最显着的缺点是您必须提供属性覆盖来恢复被污染的键,即具有数组返回类型的键。

例如

像这样

0 投票
1 回答
1268 浏览

typescript - 如何用空对象实例化接口?

我得到一个类型错误

类型 '{}' 不可分配给类型 '(s: string) => TaskDaylist'。类型“{}”不匹配签名“(s: string): TaskDaylist”。

我不能让它成为可选的?

还有另一种方法可以输入地图并用空对象实例化它吗?

0 投票
1 回答
207 浏览

typescript - TypeScript 映射类型的乐趣 + 挫折

问题介绍

我正在努力为用 TypeScript 编写的特定函数开发强类型...

出于说明目的,假设我在机动车辆部门工作,并且有一个功能registerVehicles可以接受按名称组织的许多车辆的注册详细信息,并返回每辆车的车牌。

该函数返回一个对象,其中包含每辆车的名称及其新注册的车牌:

该函数存在并且运行良好,问题在于它是强类型的

解决方案必须满足以下标准:

  1. 变量licensePlates应该从函数的结果中隐式键入。

  2. 尝试传递不存在的注册详细信息应该在编译时出错。

    /li>
  3. 尝试访问您未注册的车辆的车牌应该在编译时出错:

    /li>
  4. TypeScript 在编译时应该知道每个车牌都是一个字符串

    /li>

我已经接近了,但我尝试的每个解决方案最终都无法满足上述要求中的至少一个。帮助我 Stack Overflow 社区,你是我唯一的希望!

0 投票
2 回答
1044 浏览

typescript - 提取泛型的 Typescript 复杂映射类型

类似于TypeScript Mapped Types: Get element type of array,我有一个类型,比如:

我想从中提取以下类型:

请注意不是 Promise 的字段之一的额外复杂性。

这甚至可能吗,还是我只是达到了打字稿推断类型能力的极限?我试着摆弄映射类型和记录类型,但我就是想不通。

更新:

假设我想对函数调用做同样的事情:

所需的类型是:

我认为这与我陈述的第一种情况足够相似,但函数返回值似乎并不像我希望的那样简单。