0%

typescript-debug

1. 去掉转换后的exports

由于phantomjs发现不了exports,所以需要把转换后文件的第一行去掉。方法是在ts文件最上面加上export = 0;
//issue: don’t add Object.defineProperty(exports, “__esModule”, { value: true });
//https://github.com/Microsoft/TypeScript/issues/14351

2. noEmit

"noEmit":true这个配置就不会产生输出文件了。

3. esModuleInterop配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
"compilerOptions": {
"moduleResolution": "node",
"esModuleInterop": true, // 这个是node package引入的问题,如果是true,会引用default
"module": "commonjs",
"target": "es6",
"allowJs": true,
"outDir": "./build",
"noImplicitAny": false,
"sourceMap": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"strictNullChecks": true
},
"include": [
"./src/**/*"
],
"exclude": [
"node_modules"
]
}

当我们import xx from ‘module’时,等价于var xx = require(‘module’).default。
当我们import {A,B,C} from ‘module’时,等价于 var {A,B,C} = require(‘module’)

当我们export modue时,等价于 export.module = module
当我们export default module时, 等价于 export.default = module
当我们export = module时, 就是最特殊的情况,因为没有default了,也没有其它的export.xx了。

总结一下,node legacy没有那个default的概念,但是用TypeScript时有了这个default的概念,为了保持兼容性,就把这个esModuleInterop设置为true,起的效果就是当遇到没有default的情况,给它用{deault: moduel}包装下,那么都会有default这个值了,避免了default是undefined的情况。