typescript調用js(node)組件,必須在每一個引用的地方都寫reference嗎?

比如我在用typescript+express,是不是每一個用到node原生組件的ts文件,頭上都要引入

///&

每一個用到express或者其它第三方插件的地方,頭上都要引入

///&

並且在使用新的npm組件時,不但要npm install這個組件,還需要typings install,而且如果typings找不到,就得自己寫聲明文件?

初學ts,查了好多地方無解,來知乎求教大神。

TS版本:2.1.0

NODE版本:6.5.0

NPM版本: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的話,為了有智能提示,需在配置項中加上以下一句:

"typescript.tsdk": "&

/node_modules/typescript/lib"

其中path為全局安裝模塊的路徑,例如我這邊是

"typescript.tsdk": "/usr/local/lib/node_modules/typescript/lib"

以上配置,以後不用到處寫/// &,可以利用vscode愉快地寫ts了


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 |