将Namespaced Javascript函数转换为Typescript

时间:2016-05-10 22:47:46

标签: javascript typescript

我知道所有javascript都是有效的打字稿,但我想开始将我的javascript转换为打字稿约定。我正在与JS的这个片段作斗争:

我的标准Javascript

if (MyCompany === undefined) {
    var MyCompany = {};
}
MyCompany.Uploader = MyCompany.Uploader || {};
MyCompany.Uploader.Core = function (config) {
    'use strict';
    function build() {
        console.log("building");
    }
    return {
        build: build
    };
};
var config = {this: "that};
MyCompany.Uploader.Core(config).build(); // outputs building to console

我一直在搞乱多种方法,我觉得我不够亲近。

我尝试转换为Typescript

失败了
namespace MyCompany.Uploader {
    export var Core = (config:any) => {
        function build() {
            console.log("building");
        }
    };
}
let configobj = {here:"there"};
MyCompany.Uploader.Core(configobj).build();

这根本行不通。我似乎无法访问构建功能。我确定这是一个新手的错误。

我得到的错误:属性构建在类型void

上不存在

1 个答案:

答案 0 :(得分:0)

那是因为你没有将javascript代码的重要部分添加到typescript版本中,而且这是包含build函数引用的返回对象,它应该是:

namespace MyCompany.Uploader {
    export var Core = (config: any) {
        function build() {
            console.log("building");
        }

        return {
            build: build
        }
    };
}

let configobj = { here: "there" };
MyCompany.Uploader.Core(configobj).build();

您还可以为配置和返回对象定义接口:

namespace MyCompany.Uploader {
    export interface Config {
        here: string;
    }

    export interface Builder {
        build: () => void;
    }

    export var Core = (config: Config): Builder => {
        function build() {
            console.log(config.here);
        }

        return {
            build: build
        }
    };
}

let configobj = { here: "there" };
MyCompany.Uploader.Core(configobj).build();