我希望我的Template.FOLDERS
定义可能值的列表(例如enum
,但带有字符串)。我希望能够引用这些可能的值来键入我的变量,因此如果我不使用其中一个可能的值,编译器会发出警告。
这是我到目前为止所做的,但我认为我弄错了:
export class Template {
public static FOLDERS: TemplateFolders = {
CONTAINERS: 'containers',
LAYOUTS: 'layouts',
PARTIALS: 'partials',
PAYMENT_METHODS: 'paymentMethods',
MAIN: 'main'
};
}
export interface TemplateFolders {
CONTAINERS: string;
LAYOUTS: string;
PARTIALS: string;
PAYMENT_METHODS: string;
MAIN: string;
}
然后,在另一个课程中我使用它:
protected TEMPLATE_FOLDER: string = Template.FOLDERS.MAIN;
但那不是我想做的,我想输入TEMPLATE_FOLDER
,这样我就只能设置一个预定义的值。
如何在TypeScript中实现这一目标?
答案 0 :(得分:1)
TemplateFolder
我建议使用帮助toFolderName
enumeration或const enum:
export const enum TemplateFolder {
Containers, Layouts, Partials, PaymentMethods, Main
}
var toFolderName = (function () {
var names = ['containers', 'layouts', 'partials', 'paymentMethods', 'main'];
return function (tf: TemplateFolder): string {
return names[tf];
};
})();
console.log(toFolderName(TemplateFolder.PaymentMethods)); // paymentMethods
TemplateFolder
class TemplateFolder {
constructor(private name: string) {
}
public toString(): string {
return this.name;
}
}
var templateFolders = {
CONTAINERS: new TemplateFolder('containers'),
LAYOUTS: new TemplateFolder('layouts'),
PARTIALS: new TemplateFolder('partials'),
PAYMENT_METHODS: new TemplateFolder('paymentMethods'),
MAIN: new TemplateFolder('main')
};
console.log(templateFolders.PAYMENT_METHODS); // paymentMethods
当然,变量templateFolders
在类Template
中可以是静态的。