我有一个动态构建的 JavaScript 对象,其中包含我的应用程序的资源(翻译字符串)。它看起来如下:
var ResourceManager = (function () {
function ResourceManager() {
var currentLanguage = $('#activeLanguage').html();
this.resources = {
get Aanmelden() {
switch (currentLanguage) {
case "en-GB":
return "Register";
case "nl-NL":
return "Aanmelden";
default:
return "Aanmelden";
}
},
get AlgemeenOpslaan() {
switch (currentLanguage) {
case "en-GB":
return "Save";
case "nl-NL":
return "Opslaan";
default:
return "Opslaan";
}
}
};
}
return ResourceManager;
}());
巧妙的是,这样我就可以使用智能感知来查找我的翻译,就像 MVC 提供的功能一样。当我在 typescript 中工作时,有没有办法提供相同的功能?这里的主要问题是我可以这样做:
declare class ResourceManager {
}
然而,这并没有为我提供此类方法的智能感知。我使用 javascript 而不是 typescript 的原因是,如果我动态构建一个 typescript 文件,它似乎不会自动将其编译为我想要发送给客户端的 javascript 文件。
有谁知道通过 typescript 资源文件而不是 javascript 来解决此问题的方法,或者允许我的其他 typescript 文件通过 javascript 对象使用智能感知?
最佳答案
TypeScript 中的代码
我不确定需要什么。也许是这样的代码?
class ResourceManager {
private currentLanguage: string;
constructor() {
this.currentLanguage = $('#activeLanguage').html();
}
public resources = {
get Aanmelden() {
switch (this.currentLanguage) {
case "en-GB":
return "Register";
case "nl-NL":
default:
return "Aanmelden";
}
},
get AlgemeenOpslaan() {
switch (this.currentLanguage) {
case "en-GB":
return "Save";
case "nl-NL":
default:
return "Opslaan";
}
}
}
}
注意:您可以 call the TypeScript compiler programmatically .
或者现有对象的声明
interface Resources {
readonly Aanmelden: string
readonly AlgemeenOpslaan: string
}
declare class ResourceManager {
resources: Resources
}
这也是在单独的文件中输出声明和数据(代码)的优雅解决方案。你可以:
- 为接口(interface)
资源
生成 TypeScript 定义; - 生成 JSON 格式的数据;
- 编写一次 JS 代码(借助 TS?),使用 Object.defineProperties 动态构建
resources
属性,来自 JSON 数据。
此外,这种构建过程可以帮助将作品作为 npm 包发布和使用。
关于javascript - 在 Typescript 中使用 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42697603/