TypeScript 聲明文件發(fā)布

2022-04-21 10:39 更新

現(xiàn)在我們已經(jīng)按照指南里的步驟寫(xiě)好一個(gè)聲明文件,是時(shí)候把它發(fā)布到npm了。 有兩種主要方式用來(lái)發(fā)布聲明文件到npm:

  1. 與你的npm包捆綁在一起,或
  2. 發(fā)布到npm上的@types organization。

如果你能控制要使用你發(fā)布的聲明文件的那個(gè)npm包的話,推薦第一種方式。 這樣的話,你的聲明文件與JavaScript總是在一起傳遞。

包含聲明文件到你的npm包

如果你的包有一個(gè)主.js文件,你還是需要在package.json里指定主聲明文件。 設(shè)置 types屬性指向捆綁在一起的聲明文件。 比如:

{
    "name": "awesome",
    "author": "Vandelay Industries",
    "version": "1.0.0",
    "main": "./lib/main.js",
    "types": "./lib/main.d.ts"
}

注意"typings""types"具有相同的意義,也可以使用它。

同樣要注意的是如果主聲明文件名是index.d.ts并且位置在包的根目錄里(與index.js并列),你就不需要使用"types"屬性指定了。

依賴

所有的依賴是由npm管理的。 確保所依賴的聲明包都在 package.json"dependencies"里指明了 比如,假設(shè)我們寫(xiě)了一個(gè)包它依賴于Browserify和TypeScript。

{
    "name": "browserify-typescript-extension",
    "author": "Vandelay Industries",
    "version": "1.0.0",
    "main": "./lib/main.js",
    "types": "./lib/main.d.ts",
    "dependencies": [
        "browserify@latest",
        "@types/browserify@latest",
        "typescript@next"
    ]
}

這里,我們的包依賴于browserifytypescript包。 browserify沒(méi)有把它的聲明文件捆綁在它的npm包里,所以我們需要依賴于@types/browserify得到它的聲明文件。 typescript相反,它把聲明文件放在了npm包里,因此我們不需要依賴額外的包。

我們的包要從這兩個(gè)包里暴露出聲明文件,因此browserify-typescript-extension的用戶也需要這些依賴。 正因此,我們使用 "dependencies"而不是"devDependencies",否則用戶將需要手動(dòng)安裝那些包。 如果我們只是在寫(xiě)一個(gè)命令行應(yīng)用,并且我們的包不會(huì)被當(dāng)做一個(gè)庫(kù)使用的話,那么我就可以使用devDependencies。

危險(xiǎn)信號(hào)

/// <reference path="..." />

不要在聲明文件里使用/// <reference path="..." />。

/// <reference path="../typescript/lib/typescriptServices.d.ts" />
....

應(yīng)該使用/// <reference types="..." />代替

/// <reference types="typescript" />
....

務(wù)必閱讀[使用依賴](./Library Structures.md#consuming-dependencies)一節(jié)了解詳情。

打包所依賴的聲明

如果你的類型聲明依賴于另一個(gè)包:

  • 不要把依賴的包放進(jìn)你的包里,保持它們?cè)诟髯缘奈募铩?/li>
  • 不要將聲明拷貝到你的包里。
  • 應(yīng)該依賴于npm類型聲明包,如果依賴包沒(méi)包含它自己的聲明的話。

公布你的聲明文件

在發(fā)布聲明文件包之后,確保在DefinitelyTyped外部包列表里面添加一條引用。 這可以讓查找工具知道你的包提供了自己的聲明文件。

發(fā)布到@types

@types下面的包是從DefinitelyTyped里自動(dòng)發(fā)布的,通過(guò) types-publisher工具。 如果想讓你的包發(fā)布為@types包,提交一個(gè)pull request到https://github.com/DefinitelyTyped/DefinitelyTyped。 在這里查看詳細(xì)信息contribution guidelines page。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)