首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何重写代码以避免TSLint“通过字符串进行对象访问”

如何重写代码以避免TSLint“通过字符串进行对象访问”
EN

Stack Overflow用户
提问于 2015-10-28 17:18:53
回答 7查看 80.9K关注 0票数 94

我是TypeScript的新手,我想知道是否有一种很好的方法来重写代码,以避免在以下代码中出现TSLint错误"object access via string literals is disallowed“

代码语言:javascript
复制
interface ECType
{
    name: string;
    type: string;
    elementType?: string;
}

export var fields: { [structName: string]: Array<ECType>; } = { };

class ECStruct1 {
    foo: string;
    bar: number;
    baz: boolean;
    qux: number;
    quux: number;
    corge: ECStruct2[];
    grault: ECStruct2;

    constructor() {
        ...
    }
} 

fields['ECStruct1'] = [
    { name: 'foo', type: 'string' },
    { name: 'bar', type: 'int' },
    { name: 'baz', type: 'bool' },
    { name: 'qux', type: 'long' },
    { name: 'quux', type: 'ulong' },
    { name: 'corge', type: 'array', elementType: 'ECStruct2' },
    { name: 'grault', type: 'ECStruct2' }
];

更新:最后,上面的内容将是一个超过300个ECStruct的自生成文件的一部分,所以我希望有类定义(例如ECStruct1)后跟它的元描述(例如fields['ECStruct1'])。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2015-10-28 22:53:30

这里有几个选项:

1)只需禁用规则

代码语言:javascript
复制
/* tslint:disable:no-string-literal */
whatever.codeHere()
/* tslint:enable:no-string-literal */

2)使用变量而不是字符串文字

代码语言:javascript
复制
// instead of 
fields['ECStruct1'] = ...
// do something like
let key = 'ECStruct1';
fields[key] = ...

3)编写/生成显式接口

参见MartylX's answer above。本质上:

代码语言:javascript
复制
interface ECFieldList {
    ECStruct1: ECType[];
}

export var fields:ECFieldList = {
    ECStruct1: [
        ...

这些都是合理的解决方案,尽管我不是#2的粉丝,因为它会毫无理由地破坏你的代码。如果你正在生成代码,也许像#3那样为fields生成一个类型是一个很好的解决方案。

票数 169
EN

Stack Overflow用户

发布于 2019-02-13 12:50:21

你可以摆脱这个规则。在rules::中查找tslint.json,即使用false添加属性"no-string-literal"

代码语言:javascript
复制
{
"rules": {
    "no-string-literal": false,
    ... other rules ...
票数 53
EN

Stack Overflow用户

发布于 2019-07-23 02:49:37

只需使用模板文字注释。

代码语言:javascript
复制
fields[`ECStruct1`]
票数 51
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33387090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档