Typescript 生成类注册表:无法使用';新';其类型缺少调用或构造签名的表达式
我有以下设置:Typescript 生成类注册表:无法使用';新';其类型缺少调用或构造签名的表达式,typescript,tsc,Typescript,Tsc,我有以下设置: //./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('./thin
//./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.
这是为什么?正确的习惯用法是什么?
import Base=require(…)
与导出默认类库不兼容
如果将console.dir(Base)
添加到things.ts
,您将看到Base
实际上是一个模块,而不是一个类:
{ __esModule: true, default: [Function: Base] }
如果将things.ts
中的导入更改为
import Base from './things/Base';
然后,您的示例开始工作
有关解释见下表:
进口货物需要申报表
import m = require("mod");
等同于ECMAScript 2015导入声明
import * as m from "mod";
es6表单总是将m
作为一个模块导入,即使它包含默认导出。import Base=require(…)
与导出默认类库
不兼容
如果将console.dir(Base)
添加到things.ts
,您将看到Base
实际上是一个模块,而不是一个类:
{ __esModule: true, default: [Function: Base] }
如果将things.ts
中的导入更改为
import Base from './things/Base';
然后,您的示例开始工作
有关解释见下表:
进口货物需要申报表
import m = require("mod");
等同于ECMAScript 2015导入声明
import * as m from "mod";
es6表单总是将m
作为一个模块导入,即使它包含默认导出。Nice!你知道为什么会这样吗?我的印象是,这个习语与你提出的解决方案是一样的。我想我找到了解释——把它添加到了答案尼斯!你知道为什么会这样吗?我的印象是,这个习语与你提出的解决方案是一样的。我想我找到了解释——把它添加到了答案中