TypeScript 索引器仍然出现 tslint 错误 "object access via string literals is disallowed"
TypeScript indexer still getting tslint error "object access via string literals is disallowed"
我正在尝试为 xmldoc
npm 包编写类型定义。
到目前为止我有这个:
declare module 'xmldoc' {
export class XmlDocument {
constructor(contents: string);
public children: IXmlNode[];
}
export interface IXmlNode {
attr: IXmlAttributes;
val: string;
name: string;
children: IXmlNode[];
}
export interface IXmlAttributes {
[index: string]: string;
}
}
tslint 仍在抱怨此代码
valueId = node.attr["id"];
带有错误消息 object access via string literals is disallowed
我认为我的索引器 ([index: string]: string
) 解决了这个问题。
谁能告诉我为什么它不起作用?
您的索引器确实解决了这个问题,因为它允许 TypeScript 对其进行编译,而且您是对的,它是有效的编译 TypeScript 代码。
这里的问题只是TSLint规则;虽然它是有效的 TypeScript,但 TSLint 试图鼓励您不要这样做,因为您正在按常量字符串进行索引,因此它可能只是对象上的 属性。 TSLint 认为您应该为要访问的属性在 IXMLAttributes 上定义固定属性。
你完全可以做到;在您的 IXMLAttributes 上添加 'id: string' 属性(除了索引 属性 之外,如果您想要使用它的非常数情况)不是一个坏主意.
虽然我个人认为这只是 TSLint 在这里有点笨手笨脚。在这些情况下,有充分的理由像这样使用常量字符串索引。我只是在您的 TSLint 配置中关闭 no-string-literal 规则。
我正在尝试为 xmldoc
npm 包编写类型定义。
到目前为止我有这个:
declare module 'xmldoc' {
export class XmlDocument {
constructor(contents: string);
public children: IXmlNode[];
}
export interface IXmlNode {
attr: IXmlAttributes;
val: string;
name: string;
children: IXmlNode[];
}
export interface IXmlAttributes {
[index: string]: string;
}
}
tslint 仍在抱怨此代码
valueId = node.attr["id"];
带有错误消息 object access via string literals is disallowed
我认为我的索引器 ([index: string]: string
) 解决了这个问题。
谁能告诉我为什么它不起作用?
您的索引器确实解决了这个问题,因为它允许 TypeScript 对其进行编译,而且您是对的,它是有效的编译 TypeScript 代码。
这里的问题只是TSLint规则;虽然它是有效的 TypeScript,但 TSLint 试图鼓励您不要这样做,因为您正在按常量字符串进行索引,因此它可能只是对象上的 属性。 TSLint 认为您应该为要访问的属性在 IXMLAttributes 上定义固定属性。
你完全可以做到;在您的 IXMLAttributes 上添加 'id: string' 属性(除了索引 属性 之外,如果您想要使用它的非常数情况)不是一个坏主意.
虽然我个人认为这只是 TSLint 在这里有点笨手笨脚。在这些情况下,有充分的理由像这样使用常量字符串索引。我只是在您的 TSLint 配置中关闭 no-string-literal 规则。