【发布时间】:2015-09-11 08:20:25
【问题描述】:
我在我的项目中使用打字稿,并在编写定义文件时注意到openui5 偶尔在必需参数之前使用可选参数。例如
// Defines a Javascript module with its name, its dependencies and a module value or factory.
define(sModuleName?, aDependencies?, vFactory, bExport?);
Typescript、Flow Type 和 Closure Compiler 都需要这种形式的参数列表:
ParameterList:
RequiredParameterList
OptionalParameterList
RestParameter
RequiredParameterList , OptionalParameterList
RequiredParameterList , RestParameter
OptionalParameterList , RestParameter
RequiredParameterList , OptionalParameterList , RestParameter
但是,这个结构不能被视为等同于三个重载函数,即
define(vFactory, bExport?);
define(aDependencies, vFactory, bExport?);
define(sModuleName, aDependencies, vFactory, bExport?);
【问题讨论】:
-
如果只有2个参数,函数的内部结构可能会使用
aDependencies的值作为vFactory。只需要一个参数,但在函数的实际定义中,第一个参数sModuleName可能对应不同的东西,具体取决于函数调用中使用的参数数量 -
所以你是对的,这些定义等同于文档中描述的定义,所以前两个参数不是真正的可选参数。
-
所以在这种情况下它是语法糖,对吧?你有没有反例说明这种翻译没有意义?
-
顺便说一句:继续写一个答案,我会接受的。
标签: typescript google-closure-compiler flowtype