问题标签 [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.
node.js - 如何在 TypeScript 中通过索引访问通用对象的属性?
我有以下函数,它遍历对象的所有属性并将它们从 ISO 字符串转换为日期:
TypeScript 不断告诉我Element implicitly has an 'any' type because type '{}' has no index signature
——指的是objectWithStringDates[key]
.
考虑到该对象是作为通用对象传入的,如果没有明确的索引签名,我将如何着手访问这些属性?
(否则如何提供索引签名或抑制此错误?)
谢谢!
json - 如何创建具有索引签名和不同类型的固定属性的 TypeScript 接口?
从遗留 api 我得到一个 JSON 响应,如下所示:
请记住,除“一般”之外的所有索引都是动态的,可能不在响应中,我无法为每个属性键入,但必须使用索引签名。
我想通过 typescript@2.9.2 来实现:
就像general
在响应中一样,但其他索引可能存在也可能不存在。
我面临的问题:
- 我不能将其
[index: string]?: number[]
设为可选,因为它会抱怨此处将数字用作值。
/li>[index: string]: number[]
将覆盖的定义,general: number
因此 tsc 将抱怨:
我什至可以使用 TypeScript 界面输入这种格式吗?
typescript - 空对象的索引签名和记录之间的区别?
我无法弄清楚索引签名和记录类型之间的区别。有人可以解释差异以及何时使用一种与另一种吗?
具体来说,我希望定义一个对象的类型,该对象的键和值将具有随机字符串,这些字符串将被迭代。
有没有区别:
和
typescript - 数字索引签名打字稿类,一般获取项目计数或访问权限
我目前正在实现一个类似数组的打字稿类。有没有办法计算 TypeScript 中索引签名对象中的项目数?该类具有成员函数和属性,但应该可以通过索引签名访问。有以下设置
我想获得没有所有静态项(函数和字符串属性)的索引项的长度。也许过滤数字键可以解决问题,但这似乎容易出错,我无法想象有更智能的方法。
这真的很hacky,我根本不喜欢这种方法。对此有何想法或建议?谢谢,干杯!
javascript - 如何正确地将索引签名添加到对象
我有以下错误(解决方案有效):
元素隐式具有“任何”类型,因为类型“{}”没有索引签名。[7017]
代码:
我尝试添加接口而不是对象(可能不正确),例如 - jsonObject: IProps
。但这无济于事,因为我的对象(jsonObject 参数)看起来像这样:
或者
所以对象结构不同。所以我真的很想知道在这种情况下如何解决没有索引签名错误?
typescript - 我可以使用索引签名为枚举创建一组描述吗?
假设我有以下枚举:
有没有办法让我轻松创建一个数组,我可以使用这些枚举值来索引,该数组将返回一个我可以用作描述的字符串值?
我试过这个:
但是这种方法需要我手动设置每个枚举值的数值,这有点可维护性问题。
归根结底,我希望能够ApiRoleDescriptions[ApiRole.User]
直接在我的代码中的其他地方编写类似的东西。
编辑:在撰写本文时,我的问题的答案似乎是否定的 - 至少在此 PR合并到 typescript 之前,它目前具有 3.3/3.4 的里程碑。但是,与此同时,我仍在寻找某种方法来完成此任务。
typescript - 对象中键的索引签名
我有以下打字稿代码
其中 ctx 属于 Context 类型
我收到以下错误
我不确定如何将索引签名添加到 Map 类型
typescript - 使用通用索引签名扩展接口,同时为实现键入
我有一个系统,它接受 key:object 对,然后让您稍后在应用程序中获取它们。
问题是这个索引签名会中断输入,因为它允许任何键存在,所以你不能输入 get() 请求。
下面是应用程序和问题的摘要片段。
我试过删除这个索引签名,这是一个问题,因为那时setting[key].value
inclass Configuration
不存在。我曾尝试删除基本设置界面,但这基本上会破坏您对输入内容所做的任何更改。我已经尝试了很多辅助函数和守卫来试图强制应用程序意识到它是一个设置。我还没有到我必须接受在 get 方法上不输入的地步。
当您打开和关闭线路时,Settings
您可以看到问题。
javascript - 如何限制 Typescript 索引签名的键
我有一个映射键值对的对象文字。是否可以将索引签名密钥限制为预定义值的范围?
我尝试了以下方法,但使用未指定的键“c”时没有抛出错误:
更新:
上面的例子在使用“noImplicitAny”时会抛出一个错误(见下面的评论)。
在我的代码中,我实际上使用的是变量而不是硬编码值,所以(我猜)Typescript 无法提前知道是否允许给定值: