簡體   English   中英

將命名空間的Javascript函數轉換為Typescript

[英]Convert Namespaced Javascript Functions to 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類型上不存在屬性構建

這是因為您沒有將JavaScript代碼的重要部分添加到打字稿版本中,而這是包含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();

您還可以為config和return對象定義接口:

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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM