【发布时间】:2017-08-19 04:03:01
【问题描述】:
我正在尝试将 when.js(github 上的一个公共 Promise 库,可以在 here 找到)作为 Cesium(描述为 here 的公共 3-D 建模框架)的属性包含在 Typescript 定义文件中我有铯库。这是因为我正在尝试将使用 Cesium 的项目中的一些 Javascript 文件转换为 Typescript,并且引用的 Cesium.js 代码包含以下代码 sn-p。但是,我不知道如何在 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 文件中声明一个名为“when”的类,我可以让上述代码工作。唯一的问题是,在这种情况下“when”是一个构造函数,但正如代码 sn-p 中明确定义的那样,函数“when”返回一个 Promise。
我尝试过的方法有效(从某种意义上说,它可以编译和运行。可能会让一些 Typescript 爱好者心碎):
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 文档之后,我确信我需要的是 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'.
【问题讨论】:
-
究竟导出了什么?
-
铯库。它包含这个第三方“when.js”。最初我下载了一个在线可用的 Cesium.d.ts 文件(gist.github.com/mgiraldo/f07432df1ccc50a0ea6e),但在这个定义文件中没有定义。
标签: javascript typescript