我试图将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'.
答案 0 :(得分:0)
我看到他们的warn.js
包含带有类型的JSDoc注释。
你应该试试这个工具:
https://github.com/ConquestArrow/dtsmake
自动制作.d.ts文件。它支持JSDoc注释。