2016-09-19 5 views
0

を構築し、私は、このセットアップを持って表現して「新しい」を使用することはできません。私は何をしようとしているは、クラスレジストリの構築:そのタイプのコールが欠けているか、署名

//./things/Base.ts 
export default class Base{ 
    constructor(){ 
    console.log("HI I AM A BASE THING"); 
    } 
} 

//things.ts 
import Base = require('./things/Base'); 

export = { 
    defaultThing: Base 
}; 

//entry.ts 
import Things = require('./things'); 

new Things.defaultThing(); 

はキーで辞書を構築しています私は与えられた型のクラスが必要なので、消費するコードに触れることなく、基本的な実装を変更することができます。これは次のメッセージで失敗します

λ tsc entry.ts 
entry.ts(3,1): error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature. 

なぜこれが適切なイディオムですか?

答えて

8

import Base = require(...)は、export default class Baseとよく混ざりません。その後、

{ __esModule: true, default: [Function: Base] } 

あなたは

import Base from './things/Base'; 

things.tsにその輸入を変更する場合は、あなた:

あなたはthings.tsconsole.dir(Base)を追加した場合、あなたはBaseが実際に存在し、モジュールではなく、クラスであることがわかります例が動作を開始します。

説明はtypescript language specificationで与えられる:

インポート

import m = require("mod"); 

はECMAScriptの2015インポート宣言

import * as m from "mod"; 

に相当するフォームの宣言を必要としますes6形式は常にをインポートします3210をモジュールとして使用することができます。

+0

ニース!なぜそれが起こるか知っていますか?私はイディオムがあなたの提案された解決法と同じように働く印象を受けました –

+0

私は説明を見つけたと思う - それを答えに加えました – artem

関連する問題