typescript調用js(node)組件,必須在每一個引用的地方都寫reference嗎?
比如我在用typescript+express,是不是每一個用到node原生組件的ts文件,頭上都要引入
///&
每一個用到express或者其它第三方插件的地方,頭上都要引入
///&
並且在使用新的npm組件時,不但要npm install這個組件,還需要typings install,而且如果typings找不到,就得自己寫聲明文件?
初學ts,查了好多地方無解,來知乎求教大神。TS版本:2.1.0NODE版本:6.5.0NPM版本:3.10.3
2.0以後不再需要typings或者tsd了,所有的type都只需要用npm來安裝:
npm install -s @types/&
然後具體如何使用,你有兩個選擇:
1. 在要用的文件前面加上types directive:/// &
2. 在tsconfig.json裡面加上一個types 屬性:
{
"compilerOptions": {
"types": [ "node" ]
}
}
效果是一樣的,就是一個是file level一個是整個project。
而具體怎麼使用,就要看看你要用的library是怎麼寫的了。如果寫成一個module,就需要先import;如果寫成一個global namespace,就可以直接用。
Edit:
經 @Qiaosen Huang 提醒,如果在tsconfig裡面moduleResolution設成node(或者用了commonjs這樣默認用node module resolution的module system)npm安裝完直接import就可以了。並且在使用新的npm組件時,不但要npm install這個組件,還需要typings install,而且如果typings找不到,就得自己寫聲明文件?--------------------------------------------------找不到 你可以用any類型啊;把 import xx = require("xxxx"); 改成 var xx = require("xxxx") 就是any類型了, 也不會提示異常;
對,自己寫聲明文件,然後放上github,成為開山鼻祖
通過 import 的方式引入模塊就可以了,當然前提你有對應的d.ts文件。
typscript2.0之後可以利用npm來管理tsd文件了,舉個例子,要安裝lodash的tsd文件:
npm install -s @types/lodash
只要在項目中安裝後,編譯的時候會自動去找對應的tsd文件的,也不用在每個文件都引用了。如果使用vscode的話,為了有智能提示,需在配置項中加上以下一句:
/node_modules/typescript/lib""typescript.tsdk": "&
其中path為全局安裝模塊的路徑,例如我這邊是
"typescript.tsdk": "/usr/local/lib/node_modules/typescript/lib"
以上配置,以後不用到處寫/// &
The Future of Declaration Files
第一個問題
// tsconfig.json
{
...
"include": [
"src/**/*",
"typings/**/*"
],
...
}
這樣就不需要寫 reference 了。
第二個問題// .d.ts
declare module "hot-new-module";
// .ts
import x, {y} from "hot-new-module";
x(y);
自己寫聲明文件自然是最好的,實在不想寫可以這樣一句話就搞定,此時 x, y 類型都是 any。
另外,其他答案里的import xx = require("xxxx");
這種語法已經廢棄了,請不要再使用了。
卧槽ts都出2.1了
---npm裝的是包,typings裝的是提示。
如果你不理會一堆error,編譯出來的js也是能跑的。
如果沒有對應的typings,就去成為開山鼻祖吧推薦閱讀:
※前後端使用同一種編程語言有什麼優勢和劣勢?
※為什麼說nodejs是前端必備技能?
※應該使用 const 定義 object 和 array 嗎?
※現在前端必須掌握nodejs技術嗎?
※為什麼 Node.js 做的站點可以不用 nginx / Apache 這類 Web server 軟體?
TAG:JavaScript | Nodejs | npm | Express框架 | TypeScript |