用导入的常量键入类属性

时间:2019-05-12 02:13:45

标签: typescript

我有全局使用的常量,想在一个类中引用。具体来说,我有一个要作为这些常量键入的class属性。例如:

'[{"id":"SP500","date":"2009-05-12","close":"908.3500"},
  {"id":"SP500","date":"2009-05-13","close":"883.9200"},
  {"id":"SP500","date":"2009-05-14","close":"893.0700"},
  {"id":"SP500","date":"2009-05-15","close":"882.8800"},
  {"id":"SP500","date":"2009-05-18","close":"909.7100"}]'

...

export const ALICE = 1;
export const BETTY = 2;
export const CARL = 3;

我知道我可以将对象引用为类型,例如上面的import {ALICE, BETTY, CARL} from './constants'; import {FooModel} from './foo.model'; export class MyClass { public constantsExample: ALICE | BETTY | CARL; public modelExample: FooModel; public stringExample: string; } 。但是,此方法失败了,因为FooModel无法识别MyClassALICEBETTY。有没有办法使用导入的常量作为类型?

3 个答案:

答案 0 :(得分:1)

尚不清楚您的实际用例是什么,但您的常数看起来更适合enum。如果需要特定的值,也可以分配这些值,但是这些值完全是可选的。

enum Humans {
    ALICE = 1,
    BETTY, // Automatically = 2 and so on.
    CARL
}

如果需要,也可以使用string literal type,但是枚举既易于维护和使用。

答案 1 :(得分:1)

要查询变量的类型,可以使用typeof运算符:

public constantsExample: typeof ALICE | typeof BETTY | typeof CARL;

答案 2 :(得分:1)

可以通过导出名为Constants的类并在那里定义值来使用经典的Constants方法。这样,您可以混合和匹配您喜欢的任何值类型。

Constants.ts


export class Constants {
  public static get ALICE() {
    return "Alice";
  }
  public static get BETTY() {
    return 1;
  }
  public static get API_URL() {
    return "mydomain.com/api/";
  }
}

然后将Constants文件导入到要获取特定值的位置:

app.component.ts

import { Constants } from '../Constants';

...

let test = `${Constants.ALICE} is my friend`;