TypeScript创建全局变量和方法

时间:2017-02-02 17:29:10

标签: typescript

我是Typescript的新手...... 我有一些外部的js文件(必须保留它们并使用它们)

所以在TypeScript中我试图创建一个GlobalVariables对象和GlobalMethods对象,该对象映射到外部js文件变量和函数。我有GlobalVariables对象工作,而不是GlobalMethods对象。代码如下......

注释掉的STATUS_MESSAGE_RESPONSE属性是不工作的部分......

declare function HelloWorld(): string;
declare var siteRoot: string;
declare function StatusMessageResponse(msg: any, callBackFunction: string): void;

export const GlobalVariables = Object.freeze({
    BASE_API_URL: 'http://example.com/',
    SITE_ROOT: siteRoot,
});

export const GlobalMethods = Object.freeze({
    HELLO_WORD: HelloWorld(),
    //STATUS_MESSAGE_RESPONSE(msg: any, callBackFunction: string): StatusMessageResponse(msg: any, callBackFunction: string): void,
});

1 个答案:

答案 0 :(得分:1)

应该是:

export const GlobalMethods = Object.freeze({
    HELLO_WORD: HelloWorld,
    STATUS_MESSAGE_RESPONSE: StatusMessageResponse
});

分配时(使用=),您必须传递一个非类型的值 如果要指定类型,则:

export const GlobalMethods: {
    HELLO_WORD: () => string;
    STATUS_MESSAGE_RESPONSE: (msg: any, callBackFunction: string) => void
} = Object.freeze({
    HELLO_WORD: HelloWorld,
    STATUS_MESSAGE_RESPONSE: StatusMessageResponse
});

修改

让我们从简单的任务开始:

export const GlobalMethods = Object.freeze({
    HELLO_WORD: HelloWorld,
    STATUS_MESSAGE_RESPONSE: StatusMessageResponse
});

这是所有javascript,传递给Object.freeze的对象是一个包含两个属性的简单对象:HELLO_WORDSTATUS_MESSAGE_RESPONSE,它们引用了两个已声明的函数存在于全球范围内。

为了增加趣味,我们可以用类型注释它 有几种方法可以实现这一点,所有这些都是等效的:

export const GlobalMethods: {
    HELLO_WORD: () => string;
    STATUS_MESSAGE_RESPONSE: (msg: any, callBackFunction: string) => void
} = Object.freeze({ ... });

使用界面:

interface MyFunctions {
    HELLO_WORD: () => string;
    STATUS_MESSAGE_RESPONSE: (msg: any, callBackFunction: string) => void
}
export const GlobalMethods: MyFunctions = Object.freeze({ ... });

使用类型别名:

type MyFunctions = {
    HELLO_WORD: () => string;
    STATUS_MESSAGE_RESPONSE: (msg: any, callBackFunction: string) => void
}
export const GlobalMethods: MyFunctions = Object.freeze({ ... });

您也可以键入assert而不是声明变量的类型:

export const GlobalMethods = Object.freeze({ ... }) as MyFunctions;

以上所有声明的类型都包含具有特定签名的函数类型的两个属性:

  • HELLO_WORD是一个没有args的函数,它返回一个字符串:() => string
  • STATUS_MESSAGE_RESPONSE是一个函数,有两个类型为msg的{​​{1}}和类型字符串的any(可能是一个错误?),函数不会返回。< / LI>