我有这个设置:
//./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();
Run Code Online (Sandbox Code Playgroud)
我正在尝试做的是使用我想要的类给定类型的键构建一个字典,让我更改底层实现而不触及消费代码.此操作失败,并显示以下消息
? tsc entry.ts
entry.ts(3,1): error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature.
Run Code Online (Sandbox Code Playgroud)
为什么这个和什么是正确的成语?
art*_*tem 12
import Base = require(...)与...混合不好export default class Base.
如果添加console.dir(Base)到things.ts,你会看到,Base实际上是一个模块在那里,不是一类:
{ __esModule: true, default: [Function: Base] }
Run Code Online (Sandbox Code Playgroud)
如果您将该导入更改things.ts为
import Base from './things/Base';
Run Code Online (Sandbox Code Playgroud)
然后你的例子开始工作了.
解释在typecript语言规范中给出:
导入需要声明表单
Run Code Online (Sandbox Code Playgroud)import m = require("mod");相当于ECMAScript 2015导入声明
Run Code Online (Sandbox Code Playgroud)import * as m from "mod";
es6表单总是m作为模块导入,即使它包含默认导出.
| 归档时间: |
|
| 查看次数: |
6411 次 |
| 最近记录: |