2017-11-15 10 views
0

私がjQTree(https://github.com/mbraak/jqTree)のsourceCodeを見ると、これはTypescriptで書かれています。typescriptでは(<typeof className> this.constructor)の意味は何ですか?

export default class SimpleWidget{ 
 
    protected static defaults = {}; 
 
    public options:any 
 
    protected $el : JQuery 
 

 
    constructor(el:Element,options:any){ 
 
     this.$el = $(el); 
 
     console.log(typeof SimpleWidget) 
 
     let defaults = (<typeof SimpleWidget>this.constructor).defaults; 
 
     console.log(defaults) 
 
     this.options = $.extend({},defaults,options); 
 
    } 
 
}

(this.constructorが)どういう意味:私はこれを見ましたか?アサーションの後で静的メソッドを取得するにはどうすればよいですか?

答えて

1

このクラスはそれに直接接続されている静的プロパティで、コンストラクタ関数にコンパイルされます:

function SimpleWidget(el, options) { ... } 

SimpleWidget.defaults = {}; 

子クラスが定義し、独自のdefaults

:にコンパイルします

class DerivedWidget extends SimpleWidget { 
    protected static defaults = { prop: 'derived default' }; 
} 

DerivedWidget.defaults = { prop: 'derived default' }; 

したがって、親は子供の静的なデフォルト値。アクセスできない場合は取得しません。SimpleWidget.defaults。しかし、それは動的であるthis.constructor.defaultsにアクセスすることができます。

+0

ありがとうございます。もう一つの質問は、の意味ですか?私の考えでは、 "typeof SimpleWidget"は文字列 "object"と同じですが、<"object"> this.constructorと書くと動作しません。 – lisleyang

+0

これは静的なデフォルトプロパティにアクセスするときに強く入力するためのものだと思います。 SimpleWidgetの*インスタンス*にコンストラクタ関数をキャストしようとしているので、 '( this.constructor).defaults'を実行できませんでした。実際にはクラスをクラスにキャストしようとしています(クラスがコンストラクタ関数にコンパイルされることを覚えておいてください)。これは '( this.constructor).defaults'で行われます。これはJavaScriptからコンパイルされたもので、 'var defaults = this.constructor.defaults'だけが残っています。 typescriptlang.org/playで試してみてください。 –

関連する問題