首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeScript从其他模块调用静态函数

问TypeScript从其他模块调用静态函数
EN

Stack Overflow用户
提问于 2017-07-03 08:07:35
回答 2查看 2.1K关注 0票数 1

当我想在另一个模块中创建全局函数时,我遇到了问题。

utils.ts文件(包含全局函数)

代码语言:javascript
复制
/// <reference path="jquery/index.d.ts" />
/// <reference path="knockout/index.d.ts" />
'use strict';

module com.test.project {
    export class utils {
        self: any;

        constructor() {
            this.self = this;
        }

        public postData(url: string, data: any): any {
            var dfd = $.Deferred();
            $.ajax({
                url: url,
                data: JSON.stringify(data),
                type: 'post',
                contentType: "application/json; charset=utf-8",
                dataType: 'json',
                cache: false,
                success: function(result) {
                    return dfd.done(result);
                },
                error: function(result) {
                    return dfd.reject(result);
                }
            });
        }
    }
}

login.ts (调用内部的全局函数)

代码语言:javascript
复制
/// <reference path="jquery/index.d.ts" />
/// <reference path="knockout/index.d.ts" />
'use strict';

module com.test.project.login {
    export class ScreenModel {
        self: any;
        userName: KnockoutObservable<string>;
        password: KnockoutObservable<string>;

        constructor() {
            this.self = this;
            this.userName = ko.observable("") as KnockoutObservable<string>;
            this.password = ko.observable("") as KnockoutObservable<string>;
        }

        private submit(): void {
            var dataObject = {
                "userName": this.userName(),
                "password": this.password()
            }
            // ↓ error here
            com.test.project.utils.postData("loginService.do", dataObject).done(function(result) {
                window.location.href = "index.do";
            }).reject(function(result) {
                alert("error");
            });
        }
    }

    $(document).ready(function() {
       ko.applyBindings(new ScreenModel()); 
    });
}

模块com.test.project内的全局函数和类中的全局函数通常在com.test.project.function和ScreenModel类模块中调用全局函数。如何在ScreenModel类中调用全局函数?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-03 08:15:06

我认为您的想法太多了:我建议您在utils模块中声明一个带有名为postData的函数的对象,并在登录模块中导入该对象。

就像这样:

代码语言:javascript
复制
export const utils = {
  postData(url, data) {
    $.ajax({})
  }
}

// ....

import { utils } from './utils'
utils.postData(url, data)
...

或

只导出您的util函数

代码语言:javascript
复制
export function postData(....)

import { postData } from './utils'
postData()
票数 1
EN

Stack Overflow用户

发布于 2017-07-03 08:12:00

在你的问题标题中已经有了它:你必须声明它为static,例如public static postData。结果的JavaScript (参见打字稿操场 )有很大的不同。

如果没有静态,则将函数分配给原型,因此需要该类的一个实例来调用该函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44880574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档