问题标签 [index-signature]

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 回答
93 浏览

typescript - Typescript:为包含索引签名和密钥对的响应对象添加类型

我不确定为我从后端服务接收的响应对象添加打字稿类型的最佳方法:

它包含一个项目 id 数组string[]以及索引签名[id: string]: Item

Typescript 似乎不喜欢在单个界面中拥有索引签名和数组。例如:

我知道在使用索引签名时,其他属性需要返回相同的类型。我是 Typescript 的新手,我有点不确定如何在不将ID从项目对象中移出的情况下使用这些数据?

错误

类型“项目”上不存在属性“地图”| 细绳[]'。

“项目”类型上不存在属性“地图”。

0 投票
1 回答
7096 浏览

javascript - 在“typeof Object”类型上找不到带有“string”类型参数的索引签名

我做了一个类似枚举的类:https ://stackoverflow.com/a/51398471

当我使用我定义的密钥访问时,它工作正常,但是当我尝试像这样动态访问时它失败了:

错误是:

有没有人帮助我错误的原因是什么以及解决方案?

请帮忙,谢谢。

我在课堂上添加了索引签名,但没有帮助

获取enum班级列表。

0 投票
1 回答
2770 浏览

typescript - TypeScript 索引签名实际上意味着什么?

我写 TypeScript 已经有一段时间了,对索引签名的含义感到困惑。

例如,这段代码是合法的:

但是这个基本上做同样事情的代码不是:

这是一个错误吗?这是什么意思?

0 投票
2 回答
492 浏览

typescript - 打字稿中迭代的索引签名

我们都可以看到这段代码是有效的javascript:

元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引类型“{ foo: string; 酒吧:数字;baz:字符串;}'。在类型 '{ foo: string; 上找不到具有类型参数的索引签名。酒吧:数字;baz:字符串;}'。

那么实现这种 TypeScript 兼容的最佳方式是什么?

0 投票
1 回答
287 浏览

typescript - 打字稿:如何从类的索引签名中排除方法?

我有一个可以由用户扩展的类,如下所示:

如您所见,this可以使用字符串进行扩展。问题是打字稿抱怨因为我没有索引签名,所以我尝试添加一个:

如何添加索引签名,但仍允许在我的类中使用方法?

当然,我可以将索引签名更改为[key: string]: string | Function,但这不正确 - 任何未知键都必须是字符串。如何仅从extendFoo索引签名中排除?

顺便说一句,我知道扩展是一种不好的模式this,但是我正在将遗留代码转换为打字稿并且别无选择。

0 投票
1 回答
400 浏览

typescript - 具有索引签名的接口的可选链接

我定义了两个接口。第一个有一个可选字段,第二个有一个索引签名:

为什么number | undefined当我使用可选链接访问属性时,第一个接口给我一个 type 的结果,而第二个接口只给我 type number

0 投票
1 回答
1003 浏览

typescript - 打字稿:使用元组作为索引类型

给定的是一些键的元组["a", "b", "c"]和一个以这些键作为属性的嵌套对象{a: {b: {c: number}}}。你如何递归地使用元组的成员作为打字稿中的索引?

没有正确键入的实现:

上面的代码怎么打?

我试过以下

但是这个错误Type alias 'RecursivePluck' circularly references itself.

请注意,SliceStartQuantity来自typescript-tuple( npm )

0 投票
2 回答
151 浏览

typescript - 键入单个记录条目

我正在寻找一个 TypeScript 类型定义,它描述具有单个属性(具有任何值)的对象。

我知道这是索引签名,例如

或者

但是,这将允许像

我正在寻找一种 Y 类型,它限制 obj 具有单个属性,代表一种“RecordEntry”,即

应该没问题但是

应该被编译器拒绝。

这甚至可能吗?

0 投票
2 回答
1470 浏览

typescript - TS: `unions can't be used in index signatures, use a mapped object type instead` 然后映射对象不作为字符串/数字传递

收到错误后,unions can't be used in index signatures, use a mapped object type instead我现在尝试将字符串文字联合(接口的键名)转换为映射对象,如此处所述。https://github.com/microsoft/TypeScript/issues/24220#issuecomment-390063153

但它仍然无法正常工作:

为了证明前面的问题:

有人知道怎么修这个东西吗?这最后两次尝试让我陷入了困境。编译器似乎希望映射对象传递一组受约束的字符串;我不知道如何以可接受的方式给予它。

打字稿游乐场

链接到 TS Playground

更新 1

尝试:

错误信息:

更新 2

尝试:

错误:

0 投票
2 回答
490 浏览

typescript - 如何将索引签名与已知属性混合?

假设接口具有一些已知属性及其类型,并且可以具有其他具有未知键和其他类型的属性,例如:

TS错误:

“数字”类型的属性“长度”不能分配给字符串索引类型“字符串”。

这样的界面应该怎么打?