我是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,
});
答案 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_WORD
和STATUS_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>