我试图在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
}
}这将导致以下错误:
属性'CATALOG1‘不存在于类型{ catalog: string:"CATALOG1“区"CATALOG2”\ "CATALOG3“}中
有人能详细说明吗?
发布于 2016-09-07 18:55:49
你所描述的不是“像地图一样的行为”,用一张地图你会做以下事情:
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;(操场密码)
https://stackoverflow.com/questions/39376825
复制相似问题