在Typescript定义文件中定义未知类型的Javascript函数

时间:2017-08-16 23:26:40

标签: javascript typescript

我试图将when.js(github上的公共Promise库,可以找到StackOverflow Comment)作为Cesium(一个描述为here的公共3-D建模框架)的属性包含在我用于Cesium库的Typescript定义文件。这是因为我试图将一些Javascript文件从使用Cesium的项目转换为Typescript,并且引用的Cesium.js代码包含下面的代码片段。但是,我对如何在d.ts文件中声明when.js感到茫然。它似乎不是一个班级,我不认为它是一个界面。我该怎么做这个属性 - 它是什么类型的对象?

(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文件中我有。唯一的问题是,在这种情况下"当"是一个构造函数,但正如在代码片段中明确定义的那样,函数"当"返回一个承诺。

我尝试过的功能(从编译和运行的角度来看。可能打破了一些打字稿爱好者和心灵):

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>;
    }
}

非常感谢任何建议。

修改

在使用Typescript文档稍微讨论之后,我确信我需要的是here。但由于它被声明为接口,因此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'.

1 个答案:

答案 0 :(得分:0)

我看到他们的warn.js包含带有类型的JSDoc注释。

你应该试试这个工具:

https://github.com/ConquestArrow/dtsmake

自动制作.d.ts文件。它支持JSDoc注释。