、普段とクラス型のタイプを定義:クラスが引数として渡されたときに、例えばなぜobject.constructorは "Function"であり、TypeScriptでは "newable"ではないのですか?活字体で
declare type Type = {
new (...args: any[]): any
}
、これを用いることができます。これは、Type
がC#にあるものと似ていますが、new
演算子で直接インスタンス化することもできます。私の知る限り、このタイプ定義はに効果的に類似している:引数、プロパティ、または他の変数は(コンストラクタ関数に、より正確に)クラスへの参照を含むと予想される場合
A constructor function that may receive any number and type of arguments, and may return anything.
、Type
タイプは常に私には非常に便利です。
しかし、時には私はクラス(コンストラクタ関数)自体への参照を持たない状況に出くわすことがあります。そのプロトタイプだけです。しかし、それはしかし、タイプFunction
である
obj.constructor
によってクラス自体への参照を取得することは可能だし、クラスとしてインスタンス化することはできません:これはエラーを生成
new obj.constructor(); // Error: Cannot use 'new' ...
:
Cannot use 'new' with an expression whose type lacks a call or construct signature.
私はタイプのアサーションを使用している場合、コンパイラはnew
オペレータを受け入れ、実行時に予想されるようにコンパイルされたコードは動作します。
なぜobj.constructor
は新製品ではないのですか?
あなたはコードの完全な例として与えることができますか?あなたが持っているものを再現しようとしましたが、なぜ生成されたjsから新しいobj.constructor()**を呼び出すことができなかったのかは明らかです。オブジェクトに**コンストラクタ**プロパティはありません。 http://www.typescriptlang.org/Playground#src=type%20Type%20%3D%20%7B%0A%20%20%20%20new%20(..args%3A%20any%5B%5D) )%3A%20A%20A%20A%20A%20A%20A%20A%20A%20A%20A%20%%20A%20%%20%%20A%20%20%20%20%20%20%%20%7B%0A% 0A%20%20%20%20%7D%0A%7D%0A%0Alet%20b%20%3D%20new%20a()%3B – toskv