在Typescript定义文件中定义未知类型的Javascript函数
我试图在作为Cesium属性的公共3-D建模框架(描述为here)中包含when.js(github上的公共Promise库,可以找到here)一个Typescript定义文件,用于Cesium库。这是因为我试图将一些使用Cesium的项目的JavaScript文件转换为Typescript,并且引用的Cesium.js代码包含下面的代码片段。但是,我对如何在d.ts文件中声明when.js感到不知所措。它似乎不是一个类,我不认为它是一个接口。我应该如何去处理这个属性 - 它是一个什么样的对象?在Typescript定义文件中定义未知类型的Javascript函数
(function(define) { 'use strict';
define('ThirdParty/when',[],function() {
var reduceArray, slice, undef;
//
// Public API
//
when.defer = defer; // Create a deferred
/* more when.otherProperties set here */
/**
* Register an observer for a promise or immediate value.
*
* @param {*} promiseOrValue
* @param {function?} [onFulfilled]
* @param {function?} [onRejected]
* @param {function?} [onProgress]
* @returns {Promise}
*/
function when(promiseOrValue, onFulfilled, onRejected, onProgress) {
// Get a trusted promise for the input promiseOrValue, and then
// register promise handlers
return resolve(promiseOrValue).then(onFulfilled, onRejected, onProgress);
}
/**
* @param {*} promiseOrValue the rejected value of the returned {@link Promise}
* @returns {Promise} rejected {@link Promise}
*/
function reject(promiseOrValue) {
return when(promiseOrValue, rejected);
}
/* more functions defined here, including a 'defer' function */
示例代码引用此:
static getData(/* vars */) {
/* stuff */
return Cesium.when.reject('message here');
}
目前我可以得到上述代码工作,如果我声明一个类被称为“何时”在Cesium.d.ts文件我有。唯一的问题是,在这种情况下,“when”是一个构造函数,但正如代码片段中明确定义的那样,函数“when”返回一个Promise。
我试过了工作(因为它编译和运行的感觉可能打破一些打字稿爱好者的心):
declare module Cesium {
/* a lot of other functions, classes, interfaces, enums... */
class when extends Promise<any> {
constructor(promiseOrValue: any, onFulfilled?: Function, onRejected?: Function, onProgress?: Function);
static reject(promiseOrValue: any): Promise<any>;
}
}
任何意见是极大的赞赏。
编辑
在绕过多一点戳上打字稿文档之后,我越来越确信,我需要的是一个hybrid type。但是,由于它被声明为接口,TS编译器不会将其识别为Cesium的属性。
这里是我的尝试:
interface when {
(promiseOrValue: any, onFulfilled?: Function, onRejected?: Function, onProgress?: Function): any
reject(promiseOrvalue: any): any;
}
这导致在编译时出现以下错误:
TS2339: Property 'when' does not exist on type 'typeof Cesium'.
我看到他们warn.js
包含类型JSDoc评论。
你应该试试这个工具:
https://github.com/ConquestArrow/dtsmake
为了.d.ts自动文件。它支持JSDoc注释。
感谢您的建议。我知道有这样的工具存在;不过,我想知道如何根据工具自行编写它们。此外,最近为上述工具构建失败.. – anon
什么是准确导出? – lilezek
铯库。它包含此第三方“when.js”。最初我在网上下载了一个Cesium.d.ts文件(https://gist.github.com/mgiraldo/f07432df1ccc50a0ea6e),但它没有在这个定义文件中定义。 – anon