活字体のセーフガード、あなたがこれを行う場合:
Value of type typeof A
is not callable. Did you mean to include 'new'?
がしかし使用せずに作成することができますいくつかのオブジェクトがあります:あなたがエラーを取得します
class A {}
let a = A();
new
キーワード、基本的にすべてのネイティブタイプ。
あなたがlib.d.tsを見ればあなたがたとえば、異なるコンストラクタの署名を見ることができます:
StringConstructor:
interface StringConstructor {
new (value?: any): String;
(value?: any): string;
...
}
ArrayConstructor:
interface ArrayConstructor {
new (arrayLength?: number): any[];
new <T>(arrayLength: number): T[];
new <T>(...items: T[]): T[];
(arrayLength?: number): any[];
<T>(arrayLength: number): T[];
<T>(...items: T[]): T[];
...
}
することができますようにnew
キーワードがある場合とない場合が常に同じctorsを参照してください。
もちろん、この動作を模倣することもできます。
JavaScriptがチェックされないので、typescriptでチェックが行われないため、コードを使用するjsコードを書くと、new
を忘れる可能性があります。状況はまだ可能性があります。
実行時にこの問題が発生した場合は、それを検出してから、適切に処理してください(エラーをスローし、new
を使用してインスタンスを戻してログに記録してログに記録してください)。ここ
はそれについて話すのポストです:Creating instances without new(無地JS)が、TL; DRは次のとおりです。あなたは短い答えは "イエス" であることを言っているよう
class A {
constructor() {
if (!(this instanceof A)) {
// throw new Error("A was instantiated without using the 'new' keyword");
// console.log("A was instantiated without using the 'new' keyword");
return new A();
}
}
}
let a1 = new A(); // A {}
let a2 = (A as any)(); // A {}
(code in playground)
サウンズ。 –
確かに、簡単な答えは:はい、 'new'を使わずにctorを呼び出すことは可能です(しかしそのような場合にはインスタンスはありません) –