2016-09-07 8 views
1

TypeScriptでマップのような動作をシミュレートしようとしていますが、可能な値のコード補完も取得しています。私はTypeScript 1.8に限定されています。エクスポートされたconstオブジェクトマップのプロパティが定義されていません

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 
    } 
} 

Property 'CATALOG1' does not exist on type { [catalog: string]: "CATALOG1" | "CATALOG2" | "CATALOG3" }

は、誰かが手の込んだことはできますか?

CATALOGS.get("CATALOG1"); 

そして、それはあなたが定義したものを基本的にです:あなたが記述している何

答えて

2

はあなたのような何かをやるマップで、「マップのような振る舞い」ではありません{ [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

関連する問題