前言
在Typescript內引用Javascript(第三方套件),需要透過定義檔(d.ts),方可在ts內加入參考。
定義檔(d.ts)
宣告方法及回傳值,不包含實現。簡單來說,就是使得ts有型別的關念,定義檔是中間層的interface(js=>ts 型別對應)。
ps:大部分的第三方套件都有現成的定義檔,不需要自己寫。第三方定義檔可參考點此
第三方Javascript套件與typescript
Javascript與d.ts與ts之間溝通,舉例如下:
-
第三方Javascript:mod1 Javascript使用方式為: var mod2=require("mod1");
-
ts的引用方式為: import * as mod1 from "mod1"; //import mod1 = require("mod1"); 可直接使用,不須透過d.ts檔 //import {z} from "mod1";
-
新建mod1.d.ts則需宣告: 須注意由於javascirpt是使用require("mod1"),需匹配declare module "mod1"。裡面要開放的物件也是名稱要相符。
declare module "mod1"{ export function normalizeEntity(base: string, input: any): any; export function z(base: string): (input: any) => (base: string, input: any)=>void; }
-
將mod1.d.ts的位置加入tsd.d.ts
- tsd.d.ts全局參考用,子物件可以不需要依靠相對位置,而直接使用檔案內的 declare module Name 來引用。
- d.ts 寫作規範可參考點此
By 天藍小火-ts路上