TypeScript 2.3.1打破了SystemJS plunk中的更改

时间:2017-05-12 14:26:24

标签: typescript systemjs

以下是使用SystemJS 0.19.31的official Angular + TypeScript plunk,并且已更改为使用TypeScript 2.3.0。

当SystemJS配置相同的plunk is changed to TypeScript 2.3.1 or 2.3.2

'typescript': 'npm:typescript@2.3.1/lib/typescript.js'

它停止工作。控制台没有错误。

TypeScript 2.3.1有什么问题?这是一个已知的问题吗?问题是否与当前设置有关?

1 个答案:

答案 0 :(得分:4)

SystemJS模块格式自动检测存在问题。

有这个正则表达式来检查源是否是es6并且需要进行转换:

  // good enough ES6 module detection regex - format detections not designed to be accurate, but to handle the 99% use case
  var esmRegEx = /(^\s*|[}\);\n]\s*)(import\s*(['"]|(\*\s+as\s+)?[^"'\(\)\n;]+\s*from\s*['"]|\{)|export\s+\*\s+from\s+["']|export\s*(\{|default|function|class|var|const|let|async\s+function))/;

果然,TypeScript 2.3.1和2.3.2在与该正则表达式匹配的源代码中有此注释:

  // For an export of a module, we may be in a declaration file, and it may be accessed elsewhere. E.g.:
  //     declare module "a" { export type T = number; }
  //     declare module "b" { import { T } from "a"; export const x: T; }

因此,在调试时,您可以看到SystemJS加载了一个转换器(typescript),确定它是es6并且需要进行转换,加载一个转换程序,......,并且永远不会转换代码(main.ts

打字稿的正确格式是“全局”,因此将其添加到顶层的SystemJS配置应修复它:

  meta: {typescript: {format: 'global'}}