我可以从 TS 2.x 中导入用 TS 1.x 编写的类型吗?

Can I import from TS 2.x typings written in TS 1.x?

我几天前开始学习 Typescript,到目前为止一直很混乱,尤其是模块。

我正在使用 npm install -s @types/knockout 导入打字,但大多数可用的打字仍然是用 Typescript 1 编写的。

这是来自 es6-promise 包的类型定义:

declare module 'es6-promise' {
var foo: typeof Promise; // Temp variable to reference Promise in local context
namespace rsvp {
    export var Promise: typeof foo;
    export function polyfill(): void;
}
export = rsvp;
} 

有没有办法从打字稿 2 导入指定为 export = xxx 的默认导出?

是的,您可以使用它们。不幸的是,TypeScript 对 ES 模块采用了一种向后看的方法,而不是前瞻性的方法。

export = rsvp

不是默认导出。

默认导出的格式为

export default rsvp;

export = 是一个特定于 TypeScript CommonJS 的构造,它意味着分配给 module.exports 属性 可用的 CommonJS 模块。

为了将其导入为默认值,您需要做两件事。

  1. 在您的 tsconfig.json
  2. 中设置 "allowSyntheticDefualtImports": true
  3. 使用 ES 模块 <-> CommonJS 模块互操作感知运行时,例如 SystemJS and/or 在另一个构建步骤中通过 Babel 管道你的代码