セシウムのプロパティとしてwhen.js(github上の公開プロミスライブラリhereが見つかりました)を(公式の3次元モデリングフレームワークhereが記載されています)セシウムライブラリのtypescript定義ファイルです。これは、セシウムからTypescriptを使用するプロジェクトからいくつかのJavascriptファイルを変換しようとしているため、参照されているCesium.jsコードには以下のコードスニペットが含まれています。しかし、私はd.tsファイルのwhen.jsを宣言する方法を忘れています。それはクラスのようには見えず、私はそれがインターフェイスだとは思わない。どのように私はこのプロパティについて行く必要があります - どのような種類のオブジェクトですか?私は私が持っているCesium.d.tsファイルに「」と呼ばれるクラスを宣言した場合Typescript定義ファイルで不明な型のJavascript関数を定義する
static getData(/* vars */) {
/* stuff */
return Cesium.when.reject('message here');
}
現在、私は上記のコードが動作するように取得することができます。これを参照する
(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 */
サンプルコード。唯一の問題は、このケースでは「いつ」がコンストラクタですが、コードスニペットで明確に定義されているように、関数「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>;
}
}
何かアドバイスは大歓迎です。
EDIT
活字体マニュアルのもう少し周りつついた後、私は私が必要なのhybrid typeであると確信して取得しています。しかし、インターフェイスとして宣言されているので、TSコンパイラはそれをセシウムのプロパティとして認識しません。
は、ここに私が試したものです:
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'.
正確にエクスポートされるのは何ですか? – lilezek
セシウムライブラリー。これには、このサードパーティの「when.js」が含まれています。もともと、オンラインで入手可能なCesium.d.tsファイル(https://gist.github.com/mgiraldo/f07432df1ccc50a0ea6e)をダウンロードしましたが、この定義ファイルでは定義されていません。 – anon