问题标签 [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 回答
1184 浏览

javascript - 打字稿索引签名访问器

我希望我的 javascript 数据是这样的:

其中名称是对象键。我有这个打字稿类:

我可以看到我可以封装创建访问器的方法的唯一方法是将这些静态方法添加到Dog

这太可怕了。一个原因是需要静态访问:

并且似乎与应该如何编写相反,这将是:

如果有办法访问索引签名值,情况会好很多。但是我找不到任何方法来实现这一点。有没有办法或者有更好的方法来编写这个类?

请注意,这对于使用索引签名的类是不可能的:

既然它抱怨Property 'getName' of type '() => string' is not assignable to string index type 'DogDetails'


@amiramw的回答和评论对话后更新:

使用它的角度分量是:

在反馈之后,我似乎需要写:

在哪里getDogNames()

并且getDogDetails()是:

哪个有效,但不是我想要的。对于解决我的整体问题的建议,我将给予 @amiramw 赞誉。

但是,如果有办法获得打字稿索引签名值,我将非常感激?

0 投票
1 回答
910 浏览

typescript - 实现类中的打字稿索引签名和方法不起作用

我正在尝试创建自己的 Typescript 字典,例如类,但在我的代码中使用了一些自定义方法。

我可以像这样创建基本字典:

这很好用......但是......如果我尝试在这个类中创建一个方法,例如

我收到此错误:

Property 'getValues' of type '() => T[]' is not assignable to string index type 'T'.

这甚至可能吗?如果是,我如何为我的班级创建方法?

0 投票
2 回答
563 浏览

typescript - 我可以通过代理实例化 TypeScript 类吗?

注意:我已经更新了这个问题,希望能让事情更清楚。

我正在尝试通过一个名为elemTypes. 此对象是对类的引用列表,我想使用这些类以编程方式构建基于类似 DOM 的树结构的对象。我对 TypeScript 很陌生,所以我希望我在这里遗漏了一些简单的东西?

这是代码:

上面一行的输出是:

我遇到的问题是 SublimeText 3 给了我这个错误:

我已经尝试通过阅读 TypeScript 文档并查看一些 StackOverflow 关于类似问题的答案来解决这个问题,但我似乎无法找出我在这里做错了什么。

但是有谁知道是否有一种方法可以定义meta将停止在我的 IDE 中出现这种隐含任何错误的对象?(注意:我不想在我的.ts-config.js文件中关闭隐式错误。)

我不想在我的ts-config.

任何想法表示赞赏。

0 投票
1 回答
7066 浏览

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

假设我有接口

和一个函数

当我启用 typescript 的strict标志时,我收到错误“元素隐式具有 'any' 类型,因为类型 'X' 没有索引签名”。因此,为了明确起见,我可以在 X 的定义中添加一个索引签名

十分简单。


但是,如果 IX 现在是映射类型:

我有这个功能

我应该在哪里添加索引签名?有没有办法在不诉诸于做一些粗俗的事情的情况下明确这一点Object.keys(x).map(s => (x as any)[s])

0 投票
2 回答
3021 浏览

typescript - 如何将已知的接口属性与自定义索引签名相结合?

您如何键入一个可以同时具有几个声明的可选属性的对象,例如:

以及自定义属性(必须是函数),例如:

这是我想看到的,例如:

尝试将索引签名添加到具有已知键(即hello?: string, moo?: boolean)的接口需要所有键都是索引签名类型的子集(在这种情况下,函数返回 a boolean)。这显然失败了。

0 投票
2 回答
874 浏览

typescript - 在 Typescript 中迭代对象键时如何避免隐式任何

以下代码:

给出 TypeScript 编译错误:

我如何告诉编译器我只迭代具有字符串值的键并且可以安全地重新分配它们的值?

0 投票
5 回答
24871 浏览

javascript - 如何在 TypeScript 中添加索引签名

我正在尝试使用 reduce 和 Typescript 来达到传入消息的总数。我对如何添加索引签名感到困惑。我不断收到错误消息:“元素隐式具有 'any' 类型,因为类型 '{}' 没有索引签名。” 在变量 newArray 和 counts[k] 上。我已经阅读了几个类似的问题,但还没有弄清楚如何将它们应用于我的特定场景。我是 JavaScript 和 TypeScript 的新手。

这是我的数组:

这就是我需要我的数组在图表图中使用的方式:

在这个 Stack Overflow 问题的“只是一个学生”的回答的帮助下:Group and count values in an array ,我有以下内容。

我在哪里以及如何声明索引签名?以下是我尝试过的各种方法。

  • let newArray: { [time: string] };并收到重复标识符错误。

  • 将字符串添加到参数var counts = data.reduce((newA:string, item)会给我一个错误“元素隐式具有'任何'类型,因为索引表达式不是'数字'类型。”

  • 添加newA[time].toString()给我错误,“赋值表达式的左侧必须是变量或属性访问。”

0 投票
1 回答
283 浏览

typescript - Index signature with typescript

I have a problem with determining what is the correct index-signature when enabling "noImplicitAny" in the typescript.

it says on the last line: Error:(17, 11) TS7017: Element implicitly has an 'any' type because type '{ foo?: number; bar?: number; }' has no index signature.

0 投票
1 回答
380 浏览

typescript - 类型“HTMLFormControlsCollection”没有属性“x”并且没有字符串索引签名

尝试解构form.elements对象时出现以下错误:

类型“HTMLFormControlsCollection”没有属性“x”并且没有字符串索引签名

控制台输出截图

我不想使用: any不会发出此错误的类型注释。

0 投票
1 回答
497 浏览

typescript - 如何在不打开界面的情况下设置索引签名

考虑这段代码:

启用严格模式时出现此错误:TS7017:元素隐式具有“任何”类型,因为类型“MyInterface”没有索引签名。

最简单的解决方案似乎是:

但是,这会为 MyInterface-objects 中的任何字符串属性打开。

然后我正在考虑使用映射类型:

虽然这对我来说似乎是正确的,但原始问题返回时缺少索引签名。

有没有办法既拥有索引签名,又将对象限制为一定数量的属性?