忽略TypeScript类型错误

时间:2017-04-14 23:23:18

标签: typescript systemjs

Here is SystemJS + TypeScript plunk,由official Angular plunk template创建。

如图所示,它忽略了所有TypeScript类型错误,唯一记录到控制台的是foo

main.ts

const foo: boolean = 'foo';

console.log(foo);

config.js

System.config({
  //use typescript for compilation
  transpiler: 'typescript',
  //typescript compiler options
  typescriptOptions: {
    emitDecoratorMetadata: true
  },
  paths: {
    'npm:': 'https://unpkg.com/'
  },
  //map tells the System loader where to look for things
  map: {

    'app': './src',
    ...
  },
  //packages defines our app package
  packages: {
    app: {
      main: './main.ts',
      defaultExtension: 'ts'
    },
    ...
  }
});

的index.html

...
<script src="https://unpkg.com/systemjs@0.19.31/dist/system.js"></script>
<script src="config.js"></script>
<script>
System.import('app')
  .catch(console.error.bind(console));
</script>
...

通常我更喜欢TypeScript来停止应用程序执行并抛出类型错误。

此设置有什么问题?为什么TypeScript错误被抑制?如何更改此设置?

1 个答案:

答案 0 :(得分:1)

您可以将plugin-typescript用于SystemJS,从版本6开始,可以选择在浏览器中启用类型检查(请注意this option is removed in version 7)。

但是你必须完全按照readme中的拼写确定该插件,也就是说,SystemJS配置中的typescript包含mainmeta,如下所示:

typescript: {
  "main": "lib/typescript.js",
  "meta": {
    "lib/typescript.js": {
      "exports": "ts"
    }
  }
}

然后,由于此main,您必须将typescript中的map更改为

'typescript': 'npm:typescript@2.2.1'

然后,您还需要将这些内容添加到typescriptOptions

experimentalDecorators: true,
typeCheck: true

完成这些更改后,控制台中将打印类型错误:

unpkg.com/plugin-typescript@6.0.4/lib/plugin.js:498 TypeScript [Error] 
Type '"foo"' is not assignable to type 'boolean'. (TS2322)

但我认为有一种方法可以阻止程序执行类型错误 - noEmitOnErrors对于plugin-typescript没有任何影响,据我所知。

我保存了更新的插件here,不知道它会保留多长时间。