javascript - 在 Typescript 中使用 javascript

标签 javascript typescript

我有一个动态构建的 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
}

这也是在单独的文件中输出声明和数据(代码)的优雅解决方案。你可以:

  1. 为接口(interface)资源生成 TypeScript 定义;
  2. 生成 JSON 格式的数据;
  3. 编写一次 JS 代码(借助 TS?),使用 Object.defineProperties 动态构建 resources 属性,来自 JSON 数据。

此外,这种构建过程可以帮助将作品作为 npm 包发布和使用。

关于javascript - 在 Typescript 中使用 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42697603/

相关文章:

javascript - 在绑定(bind)中使用部分函数作为下划线

javascript - antlr语法: Lexer matches "impossible" rule

javascript - 合并/交织 2 个不同长度的字符串

javascript - 带有 Rails API 的 Angularjs 休息后 400(错误请求)

javascript - 使用 jQuery 从多个表中删除行

javascript - webpack - 转译 1 ts 文件而不捆绑它(2 个条目)

class - Angular 2 : Create objects from a class

javascript - Renderer2 错误 - id 与任何元素都不匹配

angular - 如何设置构造函数使其没有太多参数?

javascript - 在 Luxon 中像持续时间一样解析 ISO 8601