首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未定义导出的const对象映射的属性。

未定义导出的const对象映射的属性。
EN

Stack Overflow用户
提问于 2016-09-07 18:25:45
回答 1查看 1.2K关注 0票数 1

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

catalog.ts

代码语言:javascript
复制
export declare type CATALOG = 'CATALOG1' | 'CATALOG2' | 'CATALOG3';
export const CATALOGS: { [catalog: string]: CATALOG } = {
    CATALOG1: 'CATALOG1',
    CATALOG2: 'CATALOG2',
    CATALOG3: 'CATALOG3'
};

example.ts

代码语言:javascript
复制
import { CATALOGS } from './catalog';

class MyClass {
    catalogs = CATALOGS;

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

这将导致以下错误:

属性'CATALOG1‘不存在于类型{ catalog: string:"CATALOG1“区"CATALOG2”\ "CATALOG3“}中

有人能详细说明吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-07 18:55:49

你所描述的不是“像地图一样的行为”,用一张地图你会做以下事情:

代码语言:javascript
复制
CATALOGS.get("CATALOG1");

这就是您定义的基本内容:{ [catalog: string]: CATALOG }

您可以这样访问它:

代码语言:javascript
复制
let a = CATALOGS["CATALOG1"];

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

代码语言:javascript
复制
interface Catalogs {
    CATALOG1: CATALOG;
    CATALOG2: CATALOG;
    CATALOG3: CATALOG;
}

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

let a = CATALOGS.CATALOG1;

(操场密码)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39376825

复制
相关文章

相似问题

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