TypeScript

时间:2015-12-19 23:40:59

标签: angularjs typescript

我目前正在开发一个应该支持多种语言的网站。本网站的开发归功于Angular JS 1.4,我目前正致力于将其升级到Angular JS 2.0。

在1.x版本中,我有一个全局文字对象,如下所示:

var language = {};

然后,我有几个文件正在做这样的事情:

language.foo = {
   key_1: "value_1",
   key_2: "value_2",
   ...
   key_n: "value_n"
}

如果我这样离开,我可以在我的“ts”文件中使用它:

var lang: string = language.foo.key_n;

它仍适用于AngularJS 2,但它不是非常TypeScripty(此外,PHPStorm将其标记为未知)。那么TypeScript中这个全局文字对象的替代方法是什么?

2 个答案:

答案 0 :(得分:1)

一种方法是在描述languages的内容的接口中使用索引签名:

// The top level object contains ILanguage objects, indexed by the name of the language.
interface ILanguages {
    [index: string]: ILanguage;
}

// An individual language contains strings, indexed by key name.
interface ILanguage {
    [index: string]: string;
}

// In the file where the language object is created:
var language: ILanguages = {};

// In the file where the foo language is defined:
language['foo'] = {
   key_1: "value_1",
   key_2: "value_2",
   ...
   key_n: "value_n"
}

// Everywhere else that it's just referenced:
declare var language: ILanguages;

var lang: string = language['foo']['key_1'];

这为languages提供了一些结构和编译时检查,而无需明确定义其字段。

答案 1 :(得分:-1)

在OOP中,您可以使用singleton来解决此类问题。这只是一个选择。 Dependency injection是另一个很好的解决方案。