2017-08-16 15 views
2

セシウムのプロパティとして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'. 
+0

正確にエクスポートされるのは何ですか? – lilezek

+0

セシウムライブラリー。これには、このサードパーティの「when.js」が含まれています。もともと、オンラインで入手可能なCesium.d.tsファイル(https://gist.github.com/mgiraldo/f07432df1ccc50a0ea6e)をダウンロードしましたが、この定義ファイルでは定義されていません。 – anon

答えて

0

私は彼らのwarn.jsは種類とJSDocのコメントが含まれています参照してください。

あなたは、このツールを試してみてください:.d.tsを作るために

https://github.com/ConquestArrow/dtsmake

ファイルを自動的に。 JSDocアノテーションをサポートしています。

+0

アドバイスをいただきありがとうございます。私はそのようなツールが存在することを知りました。しかし、ツールに依存する前に自分自身で書く方法を知りたいです。また、上記ツールの最近のビルドは失敗しています.. – anon

関連する問題