mapped-types相关内容

具有元组/联合支持的深度转换的文字脚本映射类型

我正在尝试创建实现递归类型转换的通用映射类型。 非常感谢@jcalz为https://stackoverflow.com/a/60437613/1401634提供优雅的解决方案。 (请注意,票证具有不同的作用域,不与此票证重复) 如下所示,当前映射类型不支持元组或联合类型。 是否有办法支持联合类型并使规范通过? 游乐场就绪👉Playground Link /* ..

在 TypeScript 中,如何获取值属于给定类型的对象类型的键?

我一直在尝试创建一个类型,该类型由 T 类型的键组成,其值为字符串.在伪代码中,它是 keyof T 其中 T[P] 是一个字符串. 我能想到的唯一方法是分两步: //一种映射类型,通过条件类型过滤掉不是字符串的属性类型 StringValueKeys= { [P in keyof T]: T[P] 扩展字符串?T[P] : 从不 };//上述类型的所有键键入 Key= keyof Str ..
发布时间:2021-12-05 15:19:18 其他开发

如何为映射类型添加索引签名?

假设我有接口 接口 X {a:字符串;b:数量;c:布尔值;} 和一个函数 函数值(x: X) {返回 Object.keys(x).map(s => x[s])} 当我启用 typescript 的 strict 标志时,我收到错误“元素隐式具有 'any' 类型,因为类型 'X' 没有索引签名".所以为了明确起见,我可以在 X 的定义中添加一个索引签名 [key: string]: ..
发布时间:2021-09-11 20:45:50 其他开发

TypeScript 映射类型:带嵌套的标记类型

TypeScript 中是否有一种方法可以创建 高级类型 文档? 效果很好: type Flags= {[P in keyof T]:布尔值;}界面颜色{红色:字符串;绿色:字符串;蓝色:字符串;}const activeColors: Flags= {红色:真实,绿色:真实,蓝色:假} 但是,如果我想创建一个 NestedFlags 类型,它可以像这样处理嵌套对象,该怎 ..
发布时间:2021-09-11 20:42:33 其他开发

空对象的索引签名和记录之间的区别?

我无法弄清楚索引签名和记录类型之间的区别.有人可以解释一下这些区别以及何时使用另一种吗? 具体来说,我希望定义一个对象的类型,该对象的键和值将具有随机字符串,这些字符串将被迭代. 是否有区别: let objectVariable:记录= {} 和 let objectVariable2: {[index: string]: string} = {} 解决方案 Record ..
发布时间:2021-09-11 20:37:22 其他开发

如何在键名中使用动态元素在 Typescript 界面中定义属性?

我有一个对象,它可以有 n 个属性,每个属性都相同,但名称中带有 n 值. 示例: const obj = {'数据元素-0':'东西','data-element-1': '别的东西','data-element-2': '同样的东西','data-element-3': '感觉包含的东西',}; 有没有什么方法可以比仅仅使用更具体地定义这个接口 interface Obj {[键: ..
发布时间:2021-09-11 20:35:20 其他开发

如何使用映射类型删除索引签名

给定一个接口(来自无法更改的现有 .d.ts 文件): interface Foo {[键:字符串]:任何;酒吧():无效;} 有没有办法使用映射类型(或其他方法)在没有索引签名的情况下派生新类型?即它只有方法 bar(): void; 解决方案 编辑: 从 Typescript 4.1 开始,有一种方法可以直接使用 键重映射,避免Pick 组合器.请参阅Oleg 的回答. type ..
发布时间:2021-09-11 20:24:19 其他开发

映射类型:删除可选修饰符

鉴于此代码: 接口 Foo{一弦;二?:字符串;}输入 Foo2 = {[Foo keyof中的P]:数字;} 我希望 Foo2 的类型是 { one: number;二:数量;} 然而,它似乎保留了可选的修饰符 { one?: number;二?:数;} 使用映射类型时是否可以删除可选修饰符? 解决方案 在 Typescript 2.8 中,您可以显式消除修饰符: type ..
发布时间:2021-09-11 20:21:37 其他开发

递归更改 TypeScript 类型的属性名称,包括嵌套数组和可选属性

在 TypeScript 中,我正在研究一个通用的“转换器"函数,该函数将获取一个对象并通过重命名其某些属性(包括嵌套数组和嵌套对象中的属性)来改变其形状. 实际重命名运行时代码很简单,但我无法弄清楚 TypeScript 类型.我的类型定义适用于标量属性和嵌套对象.但是如果属性是数组值,则类型定义会丢失数组元素的类型信息.如果对象上有任何可选属性,类型信息也会丢失. 我正在尝试做的事 ..

考虑中间可选键来推断嵌套值类型

我正在尝试定义帮助器类型来确定嵌套对象值的类型,同时还考虑任何可选的父键,例如在这样的(或更深的)结构中: type Foo = { a: { b?: number;} };type Foo2 = { a?: { b: number } }; 就我而言,Foo 和 Foo2 中 b 的类型应该被推断为 number |未定义.在 Foo2 中, b 本身不是可选的,但是因为 a 是,对于我的查 ..

打字稿:`| 的含义[T]`-用于数组中元素成员资格的编译时检查的约束

我想编写一个函数 f,它接受 A 类型的单个参数,其中 A 必须是一个包含元素的数组某种类型的T.为简单起见,假设 T = 'ok'(字符串 'ok' 的单一类型). 使用来自这个答案的想法,我得到了以下初步解决方案: 函数 f | [E]) &{[A 中的 K]: {[K 中的 T]: 'ok'}}[number]>(a: A) {} 正如上面引用的答案,它确实有效. 但我无法理 ..
发布时间:2021-09-10 20:10:17 其他开发

如何将元组类型转换为联合?

如何将元组泛型类型映射到联合类型? type NeededUnionType= T[keyof T];//包括所有数组属性值const 值:NeededUnionType= 2;//这不应该被允许(2 是元组长度) 预期类型:7 |字符串 解决方案 您可以通过 number 而不是 keyof T 来索引.keyof T 将包含元组对象的所有键,包括长度以及任何其他数组属性. typ ..

使用元组/联合支持进行深度转换的 TypeScript 映射类型

我正在尝试创建一个实现递归类型转换的通用映射类型. 非常感谢@jcalz 提供了来自 https://stackoverflow.com/a/60437613/1401634 的优雅解决方案. (注意票据的范围不同,与此票据不重复) 如下图,当前映射类型不支持元组或联合类型. 有没有办法支持联合类型并使规范通过? 游乐场准备👉游乐场链接 /*** 递归类型转换.支 ..

部分 T仅适用于内联值

为什么下面的代码表现得像它一样?它是 TypeScript 编译器中的错误还是缺失的功能? class MyType {构造函数(公共只读值1:字符串,公共只读值2:数字){}}函数 myFunction(props: Partial): void {//在这里做点什么}myFunction({});//编译myFunction({ value1: 'string', value2: 42 }) ..
发布时间:2021-06-14 19:45:01 其他开发