未定义导出的const对象图的属性

时间:2016-09-07 18:25:46

标签: dictionary typescript

我试图在TypeScript中模拟类似地图的行为,并获得可能值的代码完成。我仅限于TypeScript 1.8。

catalog.ts

export declare type CATALOG = 'CATALOG1' | 'CATALOG2' | 'CATALOG3';
export const CATALOGS: { [catalog: string]: CATALOG } = {
    CATALOG1: 'CATALOG1',
    CATALOG2: 'CATALOG2',
    CATALOG3: 'CATALOG3'
};

example.ts

import { CATALOGS } from './catalog';

class MyClass {
    catalogs = CATALOGS;

    constructor() {
        CATALOGS.CATALOG1; // error
        this.catalogs.CATALOG1; // error
    }
}

这导致以下错误:

  

{[catalog:string]类型上不存在属性'CATALOG1':   “CATALOG1”| “CATALOG2”| “CATALOG3”}

有人可以详细说明吗?

1 个答案:

答案 0 :(得分:2)

你所描述的并不是一个类似地图的行为",你可以通过地图执行以下操作:

CATALOGS.get("CATALOG1");

这基本上就是你所定义的:{ [catalog: string]: CATALOG } 您可以像这样访问它:

let a = CATALOGS["CATALOG1"];

如果你想像以前那样访问它,那么它应该是:

interface Catalogs {
    CATALOG1: CATALOG;
    CATALOG2: CATALOG;
    CATALOG3: CATALOG;
}

export const CATALOGS: Catalogs = {
    CATALOG1: 'CATALOG1',
    CATALOG2: 'CATALOG2',
    CATALOG3: 'CATALOG3'
};

let a = CATALOGS.CATALOG1;

code in playground