最近,在一個(gè)項(xiàng)目中引入TypeScript時(shí)链患,出現(xiàn)下面的報(bào)錯(cuò)
node_modules/@types/requirejs/index.d.ts:38:2 - error TS2309: An export assignment cannot be used in a module with other exported elements.
38 export = mod;
~~~~~~~~~~~~~
node_modules/@types/requirejs/index.d.ts:422:13 - error TS2403: Subsequent variable declarations must have the same type. Variable 'require' must be of type 'Require', but here has type 'Require'.
422 declare var require: Require;
~~~~~~~
node_modules/@types/node/globals.d.ts:167:13
167 declare var require: NodeJS.Require;
~~~~~~~
'require' was also declared here.
報(bào)錯(cuò)原因?yàn)榈谌綆靣equirejs與node的聲明文件沖突巧鸭。
此時(shí),我就開始思考為什么我在tsconfig.json中配置了
"exclude": [ "node_modules"]
為什么tsc 還是執(zhí)行到 node_modules/@types 中去了麻捻?
后來纲仍,仔細(xì)翻看官網(wǎng)文檔才發(fā)現(xiàn)
默認(rèn)所有可見的"@types"包會(huì)在編譯過程中被包含進(jìn)來呀袱。 node_modules/@types文件夾下以及它們子文件夾下的所有包都是可見的; 也就是說郑叠, ./node_modules/@types/夜赵,../node_modules/@types/和../../node_modules/@types/等等。
此時(shí)乡革,如果指定了typeRoots寇僧,只有typeRoots下面的包才會(huì)被包含進(jìn)來。 比如:
{
"compilerOptions": {
"typeRoots" : ["./typings"]
}
}
這個(gè)配置文件會(huì)包含所有./typings下面的包沸版,而不包含./node_modules/@types里面的包婉宰。
如果指定了types,只有被列出來的包才會(huì)被包含進(jìn)來推穷。 比如:
{
"compilerOptions": {
"types" : ["node", "lodash", "express"]
}
}
這個(gè)tsconfig.json文件將僅會(huì)包含 ./node_modules/@types/node心包,./node_modules/@types/lodash和./node_modules/@types/express。/@types/馒铃。 node_modules/@types/*里面的其它包不會(huì)被引入進(jìn)來蟹腾。通過指定"types": []來禁用自動(dòng)引入@types包。
這樣設(shè)置之后区宇,就很好的解決了我項(xiàng)目中的問題