我有全局使用的常量,想在一个类中引用。具体来说,我有一个要作为这些常量键入的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
无法识别MyClass
或ALICE
或BETTY
。有没有办法使用导入的常量作为类型?
答案 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`;