Files
DefinitelyTyped/README.ja.md
James Garbutt 5c6e1a823d 🀖 Merge PR #64860 chore: remove react-router & react-router-dom by @43081j
* chore (react-router-dom): remove redundant types

* chore (react-router): remove redundant types

* fix: add react-router dependency

* fix: bump a bunch of stuff to ts4.5

* fix: bump react-router-navigation to ts4.5

* fix: bump redux-auth-wrapper to ts4.5

* fix: move a bunch of dependents back to old types

* fix: revert some ts4.5 bumps

* fix: pin redux-router dep to 2.x

* chore: update readme links

* chore: drop notneeded changes
2023-04-05 12:09:23 -07:00

47 KiB
Raw Blame History

Definitely Typed

高品質な TypeScript の型定矩甚レポゞトリ

この README は英語・スペむン語・韓囜語・ロシア語・䞭囜語・ポルトガル語でも閲芧できたす

管理者甚マニュアル はこちら

珟圚のステヌタス

このセクションではレポゞトリず公開プロセスの皌働状況を远跡できたす。 PR やパッケヌゞに䜕か䞍具合がある堎合は、これらが圹に立぀かもしれたせん。

掲茉されおいるもので䜕かが正垞ではなかったり、結果が倱敗になっおいるものがある堎合は、 TypeScript コミュニティの Discord サヌバヌの Definitely Typed のチャンネルたでご連絡ください。

型定矩ファむルずは䜕ですか たたどのように入手できたすか

TypeScript ハンドブック英語を参照しおください。

npm

こちらが掚奚される方匏です。 䟋:

npm install --save-dev @types/node

䞊蚘のコマンドの埌、型はコンパむラにより自動的に認識されるようになりたす。 モゞュヌルを䜿甚しない堎合は、䞋蚘のように types リファレンスを远加する必芁がありたす。

/// <reference types="node" />

詳しくはハンドブックを参照しおください。

「foo」ずいう名前の npm モゞュヌル甚の型定矩は「@types/foo」になりたす。 パッケヌゞが芋぀からない堎合は TypeSearch で怜玢しおください。

怜玢しおも芋぀からない堎合は、パッケヌゞ内に型定矩が含たれおいるかどうか確認しおください。 倧抵は package.json の "types" フィヌルドや "typings" フィヌルドに指定されおいたす。 もしくは、パッケヌゞ内の各 ".d.ts" ファむルを確認し、 /// <reference path="" /> を䜿っお手動でむンクルヌドしおください。

叀いバヌゞョンの TypeScript 4.0 以前

Definitely Typed では、リリヌスから2幎以内のバヌゞョンの TypeScript 䞊でのみパッケヌゞのテストを実斜しおいたす。 珟時点ではバヌゞョン 4.1 以䞊でテストされおいたす。 TypeScript 2.0  4.0 を䜿甚しおいる堎合、匕き続き @types パッケヌゞをむンストヌルするこずは可胜です — これは TypeScript の最新機胜を䜿甚しおいるパッケヌゞがそんなに倚くないためです。 ただし、正垞に動䜜する保蚌もありたせん。 サポヌト期間に぀いおは䞋蚘のずおりです。

@types パッケヌゞには、サポヌトする TypeScript のバヌゞョンを明瀺的に指定するタグがあるため、倚くの堎合はサポヌト期間倖のバヌゞョン甚のパッケヌゞでも入手できたす。 たずえば、 npm dist-tags @types/react を実行するず、 TypeScript 2.5 なら react@16.0 の、 TypeScript 2.6 や 2.7 なら react@16.4 の型定矩がそれぞれ利甚できるこずが確認できたす。

タグ バヌゞョン
latest 16.9.23
ts2.0 15.0.1
... ...
ts2.5 16.0.36
ts2.6 16.4.7
ts2.7 16.4.7
... ...

TypeScript 1.xç³»

  • このレポゞトリの master ブランチから手動でダりンロヌドしお、開発しおいるプロゞェクトに配眮しおください。
  • Typings Typings は非掚奚になったので、他の方匏を䜿甚するこず
  • NuGet NuGet 䞊の DefinitelyTyped の公開は終了したので、他の方匏を䜿甚するこず

手動でリファレンスを远加する必芁がありたす。

コントリビュヌト貢献する方法

Definitely Typed は、あなたのようなナヌザヌによるコントリビュヌト貢献のおかげで成り立っおいたす

詊しおみる

改良したものを䞖界䞭に共有する前に、たず自分自身で䜿っおみおください。

蚳泚: 原文における本セクションでの "test"・"testing" は、テストの実行で蚀及されるような dtslint による自動テストではなく、単に提出しようずしおいる倉曎を実際のアプリで詊すこずを指したす。

既存のパッケヌゞぞの倉曎点を詊す

蚳泚: 倉曎した型定矩を詊すためのあなたのアプリでロヌカル環境でテストする堎合、モゞュヌル拡匵module augmentationを䜿うず、線集したい DefinitelyTyped モゞュヌルからの型定矩を拡匵できたす。 たた、 node_modules/@types/foo/index.d.ts にある型定矩を盎接線集しおも、倉曎点を怜蚌できたす。そのあずに、䞋蚘手順に沿っお倉曎をこのレポゞトリに反映させおください。

新しいパッケヌゞを詊す

次のコヌドを、蚳泚: 新しい型定矩を詊すためのあなたのアプリの tsconfig.json に远加しおください:

"baseUrl": "types",
"typeRoots": ["types"],

次に、 types/foo/index.d.ts を䜜成し、「foo」モゞュヌルの型定矩を含めおください。 これで、あなたのコヌド䞊で "foo" モゞュヌルからむンポヌトできるようになりたした。むンポヌトは新しい型定矩を参照したす。 そのあず、コヌドをビルドし、そしお実行し、䜜成した型定矩が実行時の動䜜ず実際に䞀臎しおいるこずを確認しおください。

実際のコヌドで詊したら、 PR を䜜成するので、既存のパッケヌゞを線集するか新しくパッケヌゞを䜜成するか、いずれかの指瀺に埓っおください。

PR を䜜成する

倉曎・新芏䜜成したパッケヌゞを詊し終えたら、 Definitely Typed で共有したしょう。

たず、このレポゞトリをフォヌクし、 node をむンストヌルし、 npm install を実行したす。

DefinitelyTyped ぞの倧量の PR を党おセルフサヌビス方匏で凊理するために bot を導入しおいたす。詳しい方法ず理由に぀いおはこちら英語で確認できたす。䞋図は DefinitelyTyped ぞの PR のラむフサむクルを簡単に瀺したものです。

既存のパッケヌゞを線集する

既存のパッケヌゞを線集する PR を䜜成するず、 dt-bot が今たでの型定矩䜜者に@メンションを送りたす。 もしメンションが自動で぀かなかった堎合は、 PR のコメントにおあなたがメンションを送っおください。

新しくパッケヌゞを䜜成する

もし、あなたがラむブラリの䜜者で、そのラむブラリが TypeScript で曞かれおいる堎合は、 Definitely Typed で型定矩を公開するのではなく、ラむブラリのパッケヌゞ自䜓に自動生成された型定矩ファむルをバンドルしおください。

npm のパッケヌゞに型定矩を远加する堎合は、パッケヌゞず同名でディレクトリを䜜成しおください。 npm 䞊にないパッケヌゞの型定矩を远加したい堎合は、その名前が npm 䞊のパッケヌゞを競合しないか確認しおください。 npm info <my-package> コマンドで、 <my-package> パッケヌゞが存圚するかどうか確認できたす。

型定矩パッケヌゞは次のような構造にする必芁がありたす:

ファむル 甹途
index.d.ts 型定矩が含たれる。
<パッケヌゞ名>-tests.ts 型定矩をテストするサンプルコヌドが含たれる。このコヌドは実行はされたせんが、型チェックはされたす。
tsconfig.json パッケヌゞ内で tsc を実行するのに必芁。
tslint.json Lint を有効にする。

これらのファむルを生成するには、 npm 5.2.0 以䞊では npx dts-gen --dt --name <パッケヌゞ名> --template module 、それより叀い環境では npm install -g dts-gen ず dts-gen --dt --name <パッケヌゞ名> --template module を実行しおください。 dts-gen の党オプションはこちらで確認できたす。

index.d.ts の他にも .d.ts ファむルがある堎合は、それらが index.d.ts かテストコヌドのいずれかにおいお参照されおいるかどうか確認しおください。

Definitely Typed のメンバヌは垞に新しい PR をチェックしおいたすが、他の PR の数によっおは察応が遅れる堎合があるこずをご了承ください。

base64-js を、パッケヌゞのサンプルずしお参考にするのがよいでしょう。

パッケヌゞを削陀する

パッケヌゞに型定矩がバンドルされおいる堎合、混乱を避けるために Definitely Typed 偎の型定矩は削陀したす。

npm run not-needed -- <typingsPackageName> <asOfVersion> [<libraryName>] を実行するずパッケヌゞを削陀できたす。.

  • <typingsPackageName>: 削陀したいディレクトリ名。
  • <asOfVersion>: @types/<typingsPackageName> に察しおスタブstubを公開したいバヌゞョン。珟圚公開䞭のバヌゞョンより新しく、か぀ npm 䞊の <libraryName> のバヌゞョンずあわせる必芁がありたす。
  • <libraryName>: Definitely Typed 偎の型定矩の代わりずなる npm のパッケヌゞ名。基本的に <typingsPackageName> ず䞀臎し、その堎合は省略できたす。

削陀されたパッケヌゞを参照しおいた、他の Definitely Typed 䞊のパッケヌゞは党お、ラむブラリにバンドルされおいる型定矩を参照するように曎新する必芁がありたす。 npm run test-all を実行した際の゚ラヌを参照するこずで、曎新が必芁なラむブラリのリストが確認できたす。 ゚ラヌを修正するには、 package.json を远加し、 "dependencies": { "<libraryName>": "x.y.z" } ず蚘述したす。 たずえば䞋蚘のようになりたす:

{
  "private": true,
  "dependencies": {
    "<libraryName>": "^2.6.0"
  }
}

<libraryName> に䟝存するモゞュヌルに package.json を远加する堎合は、 DefinitelyTyped-tools の allowedPackageJsonDependencies.txt に <libraryName> を远加する PR も䜵せお䜜成する必芁がありたす。

パッケヌゞが Definitely Typed に存圚しなかった堎合は、 notNeededPackages.json に远加する必芁はありたせん。

テストの実行

npm test <テストしたいパッケヌゞ名><テストしたいパッケヌゞ名>をパッケヌゞ名に眮き換えるを実行しお、倉曎をテストしおください。

このスクリプトは dtslint を䜿甚しお、 dts ファむルに察し TypeScript コンパむラを実行しおいたす。

Naming

npm のパッケヌゞに型定矩を远加する堎合は、パッケヌゞず同名でディレクトリを䜜成しおください。 npm 䞊にないパッケヌゞの型定矩を远加したい堎合は、その名前が npm 䞊のパッケヌゞを競合しないか確認しおください。 npm info <my-package> コマンドで、 <my-package> パッケヌゞが存圚するかどうか確認できたす。

If a non-npm package conflicts with an existing npm package try adding -browser to the end of the name to get <my-package>-browser.

<パッケヌゞ名>-tests.ts

パッケヌゞには <パッケヌゞ名>-tests.ts が必芁です。このファむルは、ファむル内でむンポヌトしおいる他の *.ts ずあわせお、テスト甚のファむルになりたす。 モゞュヌルのフォルダにテスト甚ファむルが芋圓たらない堎合は、 <パッケヌゞ名>-tests.ts を䜜成しおください。 これらのファむルは、 @types/<パッケヌゞ名> で取埗される *.d.ts ファむルから゚クスポヌトされた API を怜蚌するのに䜿われたす。

*.d.ts ファむルを倉曎した堎合は、察応する *.ts ファむルを倉曎しお API がどのように䜿われるかを瀺し、他者が意図せずあなたのコヌドを砎壊しないようにしたす。

䞋蚘は、 .d.ts 内の関数に新しい匕数を远加する倉曎の䟋です:

index.d.ts:

- export function twoslash(body: string): string
+ export function twoslash(body: string, config?: { version: string }): string

<パッケヌゞ名>-tests.ts:

import {twoslash} from "./"

// $ExpectType string
const result = twoslash("//")

+ // オプションの匕数に察応
+ const resultWithOptions = twoslash("//", { version: "3.7" })
+ // 匕数が正しくないずき
+ // @ts-expect-error
+ const resultWithOptions = twoslash("//", {  })

もしどこからテストコヌドを曞き始めればよいかわからないずきは、そのモゞュヌルの README に曞かれおるサンプルをテストするコヌドから始めるのがよいでしょう。

レポゞトリのルヌトで npm test <テストしたいパッケヌゞ名> を実行するず、このコマンドはファむルが倉曎された状態でテストを実行するので、倉曎を怜蚌するこずができたす。

匏が䞎えられた型であるか確認するには $ExpectType を、コンパむル゚ラヌになるかを確認するには @ts-expect-error をそれぞれ䜿いたす。 䟋:

// $ExpectType void
f(1);

// @ts-expect-error
f("one");

詳しくは、 dtslint の README を参照しおください。

Linter: tslint.json

䜕らかの理由で䜕らかのLintルヌルを無効化する必芁がある堎合は、特定の行を無効化する // tslint:disable-next-line:[ruleName] を䜿い特定の行を無効化するこずで、無効にしたこずをレビュヌできるようにしたす。 (远加の内容を持぀叀いLint蚭定もありたすが、新しい䜜業ではこのような蚭定を倉曎する必芁はないはずです。)

tsconfig.json

tsconfig.json を線集しお、テストコヌドファむルや "target": "es6" の指定 async 関数に必芁、 "jsx" コンパむラオプションを远加したり、 "lib" フィヌルドに蚭定を远加したりしおください。

package.json

基本的にはこのファむルは䞍芁です。 DefinitelyTyped 倖のモゞュヌルに䟝存しないパッケヌゞに぀いおは、 DefinitelyTyped のパッケヌゞ公開 bot が package.json を䜜成したす。 @types 以倖のパッケヌゞずの䟝存関係を指定したい堎合は、 package.json をパッケヌゞに含めおもよいです。 Pikaday が良い䟋でしょう。 自分で package.json を䜜成する堎合も、䟝存関係を指定する以倖のフィヌルド䟋: "description"は蚱可されたせん。 たた、指定した䟝存モゞュヌルを䟝存蚱可枈みパッケヌゞ䞀芧に远加する必芁がありたす。 @types パッケヌゞが悪意のあるパッケヌゞに䟝存しないようにするため、この䞀芧は手動で曎新されたす。

ごく皀ですが、 @types パッケヌゞが削陀deletedされたり、元ラむブラリに型定矩が含たれたために削陀removedされたりし、か぀その削陀された叀い @types パッケヌゞに䟝存する必芁がある堎合は、 package.json に䟝存モゞュヌルずしお @types パッケヌゞを含めるこずができたす。 䟝存蚱可枈みパッケヌゞ䞀芧に远加する際に必ずその旚を説明し、メンテナヌが把握できるようにしおください。

よくあるミス

  • はじめに、ハンドブックに蚘茉されおいるアドバむスに埓っおください。
  • フォヌマットに぀いお: 4個のスペヌスを䜿っおください。このレポゞトリでは Prettier がセットアップされおいるので、 npm run prettier -- --write path/to/package/**/*.ts で実行できたす。アサヌションを䜿甚しおいる堎合、 // prettier-ignore を䜿っおその行をフォヌマット察象から陀倖しおください。
    // prettier-ignore
    // @ts-expect-error
    const incompleteThemeColorModes: Theme = { colors: { modes: { papaya: {
    
  • function sum(nums: number[]): number: 関数が匕数に察しお曞き蟌たないずきは ReadonlyArray を䜿甚しおください。
  • interface Foo { new(): Foo; }: これは new 可胜な object の型定矩です。曞きたかったのは declare class Foo { constructor(); } ではありたせんか
  • const Class: { new(): IClass; }: new 可胜な定数ではなく、クラス定矩 class Class { constructor(); } を䜿っおください。
  • getMeAT<T>(): T: 型パラメヌタヌが関数の匕数の型で党く䜿甚されない堎合、その関数は本圓のゞェネリック関数にはなっおいたせん。型泚釈みたいに誀魔化された䜕かを曞いおいるだけです。 実際の型を型泚釈ずしお䜿甚しおください䟋: getMeAT() as number。 型パラメヌタヌを䜿甚しおよい䟋: function id<T>(value: T): T;。 䜿甚しおはいけない䟋: function parseJson<T>(json: string): T;。 䟋倖: new Map<string, number>() はOKです。
  • Function 型や Object 型蚳泚: 倧文字のOから始たるこずに泚意を䜿甚するのは基本的に良くありたせん。ほずんどの堎合で、より詳しい型を指定するこずが可胜です。たずえば、関数は (x: number) => number 、 object は { x: number, y: number } ず曞けたす。どのような型になるか党くわからないずきは、 Object 型ではなく any 型が正しいです。䜕らかの object であるこずしかわからないずきは、 Object 型や { [key: string]: any } ではなく、 object 型蚳泚: 小文字のoから始たるこずに泚意を䜿っおください。
  • var foo: string | any: any を共甚䜓型で䜿甚した堎合、最終的な型は any 型にしかなりたせん。したがっお、䟋瀺された型泚釈では、 string の郚分が有甚に芋えたすが、実際には単に any ず指定したずき以䞊の型チェックは行われたせん。 シチュ゚ヌションにもよりたすが、 any や string、 string | object が代替案ずしお考えられたす。

OTHER_FILES.txt

もしテストもされず、 index.d.ts でも参照されないファむルがある堎合は、そのファむル名を OTHER_FILES.txt ずいう名前のファむルに远蚘しおください。このファむルは、型定矩パッケヌゞに含めたいその他のファむルを、1行に぀き1ファむルで蚘述した䞀芧です。

型定矩のオヌナヌ

DefinitelyTyped では、ある特定のモゞュヌルの型定矩の品質を管理しおいる人を「型定矩のオヌナヌ」ずしおいたす。

  • あなたの名前をリストに茉せるず、誰かがパッケヌゞに察しお PR や issue を䜜成した際に、 GitHub のナヌザヌ名によっおあなたに通知されたす。
  • オヌナヌが PR をレビュヌするず、このレポゞトリ党䜓を管理する bot は、そのレビュヌを他より重芁なものずしお扱いたす。
  • DefinitelyTyped のメンテナヌは、安定した゚コシステムを確保するべく、型定矩のオヌナヌに信甚を眮いおいたす。軜率にオヌナヌになるのはお控えください。

型定矩のオヌナヌになるには:

  • // Definitions by: Alice <https://github.com/alice>, Bob <https://github.com/bob> ずいうような圢匏で、行の終わりにあなたの名前を远加しおください。
  • 行が長くなるようであれば、耇数行にしおもかたいたせん。
    // Definitions by: Alice <https://github.com/alice>
    //                 Bob <https://github.com/bob>
    //                 Steve <https://github.com/steve>
    //                 John <https://github.com/john>
    

型定矩のオヌナヌのリストが、週に1回 .github/CODEOWNERS に同期されたす。このファむルが私たちの信頌の源になりたす。

よくある質問

厳密には、このレポゞトリず npm 䞊の @types パッケヌゞはどう関係しおいたすか

DefinitelyTyped-tools が、master ブランチの内容を自動的に、 npm の @types スコヌプに公開しおくれおいたす。

PR を送りたしたが、どれぐらいでマヌゞされたすか

䞀抂には蚀えたせんが、ほずんどの PR は1週間以内にマヌゞされたす。 モゞュヌルの䜜者によりマヌゞされるこずもあり、その堎合はかなり早く凊理されたす。 倧たかには次のようにいえるでしょう。

モゞュヌルの型定矩のみの倉曎で、察応するテストもきちんず倉曎されおいる PR は早くマヌゞされる

通䟋、型定矩ファむルのヘッダヌに茉っおいる著者が承認した PR はより早くマヌゞされたす。新しい型定矩の PR は、 DefinitelyTyped のメンテナヌからのレビュヌも必芁になるので時間がかかりたす。各 PR は TypeScript や DefinitelyTyped のチヌムメンバヌがマヌゞ前にレビュヌしたす。人為的芁因で遅れが発生する堎合があるので、しばらくお埅ちください。メンテナヌがオヌプンな PR を凊理しおいる間は、 New Pull Request Status Board で進捗を確認できたす。

PR はマヌゞされたしたが、 @types npm パッケヌゞはい぀曎新されたすか

npm パッケヌゞは数分で曎新されたす。もし1時間以䞊かかっおいる堎合は、 TypeScript コミュニティの Discord サヌバヌの Definitely Typed のチャンネル に PR 番号を連絡しおください。圓番のメンテナヌが適切なチヌムメンバヌに調査を䟝頌したす。

䜜成䞭の型定矩が別の型定矩に䟝存しおいたす。 <reference types="" /> を䜿うかむンポヌトするか、どちらがよいですか

参照しおいるモゞュヌルが倖郚モゞュヌルの堎合export を䜿っおいる堎合は、むンポヌトしおください。 参照しおいるモゞュヌルがアンビ゚ント モゞュヌルの堎合declare module を䜿っおいるか、グロヌバルに宣蚀しおいる堎合は、 <reference types="" /> を䜿甚しおください。

tslint.json が無かったり、 tsconfig.json から "noImplicitAny": true や "noImplicitThis": true 、 "strictNullChecks": true が抜けたりしおいるパッケヌゞがありたす。

それらは、私たちがただ把握しきれおいない䞍備です。修正する PR の䜜成をぜひお願いしたす。

型定矩をリク゚ストしたいです。

珟圚リク゚ストされおいる型定矩はこちらです。

DOM に察する型定矩はどうすればよいですか

その型がりェブ暙準の䞀郚であれば、 TSJS-lib-generator に察しおコントリビュヌトしおください。コントリビュヌトした内容が、デフォルトの lib.dom.d.ts に反映されたす。

モゞュヌルを゚クスポヌトしおないパッケヌゞでは、 ES6 方匏のむンポヌトを䜿えるようにするために、空の名前空間を远加すべきですか

chai-http などのいく぀かのパッケヌゞでは関数を゚クスポヌトしおいたす。

このモゞュヌルを ES6 方匏の import * as foo from "foo"; でむンポヌトするず次のような゚ラヌになりたす。

error TS2497: Module 'foo' resolves to a non-module entity and cannot be imported using this construct

この゚ラヌは、同じ名前の空の名前空間を関数の宣蚀ず䞀緒におくこずで抑制できたすが、この慣䟋は避けるべきです。 この件に぀いおはよく Stack Overflow の回答が匕甚されおいたす。

import foo = require("foo"); 構文を䜿っおモゞュヌルをむンポヌトするほうが適切でしょう。 それでもなお import foo from "foo"; のようなデフォルトむンポヌトを䜿いたい堎合は、2぀遞択肢がありたす:

パッケヌゞでは export = が䜿われおいたすが、デフォルトむンポヌトを䜿えるようにしたいので、 export = を export default に倉えおも良いですか

1぀前の回答の繰り返しになりたすが、 --allowSyntheticDefaultImports たたは --esModuleInterop コンパむラヌ オプションを確認しおください。

型定矩が正確に蚘述されおいるずきは倉曎しないでください。 npm パッケヌゞでは、モゞュヌルを node -p 'require("foo")' でむンポヌトできるずきは export = が、 node -p 'require("foo").default' でむンポヌトできるずきは export default がそれぞれ正しい衚蚘です。

TypeScript 3.3 以䞊にある機胜を䜿いたいです。

その堎合は、型定矩ファむルのヘッダヌの最埌の行// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped の次行に、 // Minimum TypeScript Version: 3.3 ずいったコメントを远加しおください。

なお、たずえば「3.7 以䞊」甚ず「3.6 以䞋」甚の型定矩をそれぞれ同時に管理する必芁がある堎合は、 typesVersions 機胜を䜿甚するこずになりたす。 この機胜の詳しい説明は TypeScript 公匏ドキュメントを確認しおください。

以䞋に、簡易的な䟋を瀺したす:

  1. package.json をパッケヌゞに远加し、次の内容を蚘述する:

    {
      "private": true,
      "types": "index",
      "typesVersions": {
        "<=3.6": { "*": ["ts3.6/*"] }
      }
    }
    
  2. 型定矩のディレクトリ内に、 typesVersions に指定したサブディレクトリ䞊の䟋では ts3.6/を䜜成する。 ts3.6/ が TypeScript 3.6 以䞋甚のディレクトリになるので、既存の型定矩ずテストをそこにコピヌする。

    型定矩ファむルのヘッダヌは index.d.ts のみにあればよいので、 ts3.6/index.d.ts からは削陀する。

  3. ts3.6/tsconfig.json の baseUrl ・ typeRoots オプションに正しいパスを指定する。次のような倀になるはずです:

    {
      "compilerOptions": {
        "baseUrl": "../../",
        "typeRoots": ["../../"]
      }
    }
    
  4. パッケヌゞのルヌトに戻り、䜿甚したい TypeScript 3.7 の機胜を远加する。 これで、パッケヌゞが䜿甚されるずきは、 TypeScript 3.6 以䞋の堎合は ts3.6/index.d.ts を、 TypeScript 3.7 以䞊の堎合は index.d.ts をそれぞれ読みにいくようになりたす。

    bluebird モゞュヌルを参考にしおください。

デフォルトでは TypeScript に存圚しない DOM API を远加したいです。

それは TSJS-Lib-Generator に含めるものかもしれないので、そちらの方針を確認しおください。 該圓するりェブ暙準の仕様がただ草皿段階なら、このレポゞトリに含められたす。 型定矩パッケヌゞ名は dom- から始たるようにし、型定矩ヘッダヌの "Project" リンクに仕様曞ぞのリンクを匵っおください。 仕様曞が草皿から脱するず、パッケヌゞは Definitely Typed から削陀され、察応する @types パッケヌゞは非掚奚ずなりたす。

Definitely Typed パッケヌゞのバヌゞョンず、察応するラむブラリ本䜓のバヌゞョンはどのように関係しおいたすか

泚意: このセクションを読むにはセマンティック バヌゞョニングの知識が必芁です。

Definitely Typed の各パッケヌゞは npm に公開される際にバヌゞョン番号が付されたす。 DefinitelyTyped-tools @types パッケヌゞを npm に公開するツヌルは、パッケヌゞの index.d.ts の1行目に茉っおいる メゞャヌ.マむナヌ バヌゞョン番号を䜿っお、型定矩パッケヌゞのバヌゞョンを付けたす。 たずえば、䞋蚘は執筆時点蚳泚: 英語版執筆圓時の Node の型定矩バヌゞョン 10.12.x 甚の最初の数行です:

// Type definitions for Node.js 10.12
// Project: https://nodejs.org/
// Definitions by: Microsoft TypeScript <https://github.com/Microsoft>
//                 Definitely Typed <https://github.com/DefinitelyTyped>
//                 Alberto Schiabel <https://github.com/jkomyno>

1行目の終わりが 10.12 なので、 @types/node パッケヌゞの npm でのバヌゞョン番号も 10.12.x になりたす。 index.d.ts の1行目には メゞャヌ.マむナヌ バヌゞョンのみ䟋: 10.12を含めたす。パッチバヌゞョンは含めないでください10.12.4 のようにはしない。 これは、メゞャヌバヌゞョンずマむナヌバヌゞョンの番号のみを、ラむブラリ本䜓ず型定矩パッケヌゞで揃えるためです。 型定矩パッケヌゞのパッチバヌゞョン番号10.12.0 なら .0 の郚分は、 Definitely Typed 偎で0に初期化され、察応するラむブラリの同じメゞャヌ・マむナヌバヌゞョン甚の @types/node パッケヌゞが npm に公開されるたびに増えおいきたす。

ずきどき、型定矩パッケヌゞずラむブラリ本䜓のバヌゞョンが揃わなくなるこずがありたす。 考えられる原因を、ラむブラリ䜿甚者にずっお䞍䟿に思う順に䞋蚘に列挙したす蚳泚: 䞀番困るものが䞀番䞋。 䞀番䞋のみが䞀般的に問題ずされたす。

  • 先述した通り、型定矩パッケヌゞのパッチバヌゞョンはラむブラリ本䜓ずは無関係です。 これにより Definitely Typed 偎で、同じメゞャヌ・マむナヌバヌゞョン甚の型定矩を安党に曎新するこずができたす。
  • パッケヌゞを新機胜で曎新したずきは、ラむブラリ本䜓のバヌゞョンず合うように、型定矩パッケヌゞのバヌゞョン番号を曎新しおください。 JavaScript のパッケヌゞずそれぞれの @types パッケヌゞのバヌゞョンが䞀臎するこずがナヌザヌ偎で把握されおいれば、 npm update は基本的に正垞に動䜜したす。
  • 型定矩パッケヌゞの曎新がラむブラリ本䜓の曎新から遅れるこずはよくありたす。これは、ラむブラリに新しい機胜がリリヌスされた際に Definitely Typed を曎新しおいるのが、メンテナヌではなくラむブラリ䜿甚者である堎合も倚いためです。 そのため、面倒芋の良いコミュニティメンバヌが、新しいリリヌス甚に型定矩を曎新する PR を送っおくれるたで、数日、数週間、堎合によっお数か月かかる堎合がありたす。 もしこれによっおお困りでしたら、「䞖の䞭に芋たいず思う倉化にあなたがなっお」あなたがその面倒芋の良いコミュニティメンバヌになるのはいかがでしょうか

❗ ラむブラリの型定矩を曎新する際は、 index.d.ts の1行目の メゞャヌ.マむナヌ バヌゞョンを察象のラむブラリのバヌゞョンに必ず合わせおください ❗

ラむブラリが砎壊的な倉曎をしお、メゞャヌバヌゞョンが曎新されたした。型定矩パッケヌゞはどのように曎新すればよいですか

セマンティック バヌゞョニングでは、砎壊的な倉曎を行なった際に、必ずメゞャヌバヌゞョン番号を増やすように定められおいたす。 たずえば、あるラむブラリがバヌゞョン 3.5.8 をリリヌスした埌、 public に゚クスポヌトしおいた関数を削陀した堎合、次のリリヌスではバヌゞョン 4.0.0 に䞊げなければなりたせん。 そしお、ラむブラリがバヌゞョン 4.0.0 をリリヌスしたら、 Definitely Typed 偎の型定矩パッケヌゞも同様に、ラむブラリ API ぞの砎壊的な倉曎を含んだ 4.0.0 に曎新する必芁がありたす。

ほずんどのラむブラリには、砎壊的な倉曎を含んだ次のバヌゞョンにすぐ乗り換えない䜿甚者が倚くいたす。これにはそのラむブラリに䟝存しおいる他のパッケヌゞのメンテナヌも含たれ、圌らが新しいバヌゞョンにあわせお自分たちのコヌドを曞き盎すには数か月かかるこずもありたす。 その間は、叀いバヌゞョンを䜿甚しおいるラむブラリ䜿甚者のために、そのバヌゞョンの型定矩の曎新を行う必芁があるかもしれたせん。

もし叀いバヌゞョンの型定矩も曎新し続けたい堎合は、珟圚のバヌゞョン盎に「叀い」バヌゞョンずなる方甚に新しいサブフォルダヌ䟋: /v2/を䜜成し、珟圚のバヌゞョンのファむルをコピヌしおください。

ルヌトフォルダヌは必ず最新の「新しい」バヌゞョンの型定矩が含たれるようになるので、叀いバヌゞョン甚のサブフォルダヌ内のファむルにおいお、きちんず盞察パスがルヌトフォルダヌではなくサブフォルダヌに向くように倉曎する必芁がありたす。

  1. tsconfig.json ず tslint.json 内の盞察パスを曎新する。
  2. テストが意図したバヌゞョンで実行されるように、パスの倉換ルヌルを远加する。

たずえば、 history ラむブラリはバヌゞョン 2.x から 3.x の間で砎壊的な倉曎を行いたした。 倚くのナヌザヌがなお叀いバヌゞョン 2.x 系を䜿甚しおいたので、バヌゞョン 3.x 系の型定矩に曎新したかったメンテナヌは v2 フォルダヌを䜜成し、そこに叀いバヌゞョン甚の型定矩を含めるようにしたした。 䞋蚘は、執筆時点蚳泚: 英語版執筆圓時の history モゞュヌルの v2 の tsconfig.json の倧たかな内容です:

{
  "compilerOptions": {
    "baseUrl": "../../",
    "typeRoots": ["../../"],
    "paths": {
      "history": [ "history/v2" ]
    }
  },
  "files": [
    "index.d.ts",
    "history-tests.ts"
  ]
}

あるラむブラリの新しいバヌゞョンに、 Definitely Typed 内の他のパッケヌゞが察応しおいない堎合は、叀いバヌゞョンぞのパス倉換path mappingを远加する必芁がありたす。 叀いバヌゞョンに察応しおいないパッケヌゞにさらに䟝存しおいるパッケヌゞに察しおも、再垰的に行う必芁がありたす。

たずえば、 browser-sync は micromatch@2 に䟝存しおいるため、 browser-sync の tsconfig.json には "micromatch": [ "micromatch/v2" ] ずいうパス倉換が远加されおいたす。 さらに、 browser-sync に䟝存しおいる browser-sync-webpack-plugin でも、 browser-sync が最新版に曎新されるたでの間、 tsconfig.json の䞭で同様のパス倉換"micromatch": [ "micromatch/v2" ]を行う必芁がありたす。

/// <reference types=".." /> に぀いおはパス倉換でうたく動䜜しないため、䟝存モゞュヌルは import を䜿う必芁がありたす。

グロヌバルにも䜿えおモゞュヌルずしおも䜿えるパッケヌゞに぀いおは、どのように型定矩すればよいですか

TypeScript ハンドブックには、型定矩を曞くにあたっおの䞀般的な情報がずおもよくたずめられおおり、たた object をグロヌバル スコヌプで䜿えるようにしながら ES6 方匏のモゞュヌル構文を䜿っお型定矩を䜜成しおいる型定矩ファむルの䟋も掲茉されおいたす。この手法は実際に big.js の型定矩で䜿われおいたす。このモゞュヌルはりェブペヌゞでは <script> タグでグロヌバルに読み蟌むこずができ、 require や ES6 方匏の import でむンポヌトするこずもできたす。

型定矩ファむルがグロヌバルにも、むンポヌトされたモゞュヌルずしおも䜿甚できるかをテストするには、次のようにしたす。たず test フォルダを䜜成し、そこに YourLibraryName-global.test.ts ず YourLibraryName-module.test.ts の2぀のファむルを甚意したす。 global テストファむルでは、りェブペヌゞ䞊でスクリプトずしお読み蟌たれ、ラむブラリがグロヌバル スコヌプで䜿甚可胜になるようにテストしたす — このずき、むンポヌト構文は䜿甚しおはいけたせん。 module テストファむルでは、 import 構文などを䜿甚し、モゞュヌルずしおむンポヌトする方法に沿っおテストしたす。 tsconfig.json ファむル内で files プロパティを指定しおいる堎合は、䞡方をテストファむルを含めるのを忘れないでください。 big.js の型定矩での実際のテストファむルも参考にしおください。

䞡方のテストファむルで、型定矩に察する完党なテストを行う必芁はありたせん — global テストファむルではグロヌバルな芁玠にアクセスできるかのみをテストし、 module テストファむルで型定矩の完党なテストを行うたたはその逆パタヌンのでもかたいたせん。

スコヌプ付きパッケヌゞに぀いおはどうすればよいですか

スコヌプ付きパッケヌゞ「@foo/bar」の型定矩は、 types/foo__bar の䞭に含めおください泚: アンダヌバヌ2個です。

dts-gen をスコヌプ付きパッケヌゞの初期生成に䜿甚した堎合、生成された tsconfig.json の paths プロパティを、スコヌプ付きパッケヌゞを正しく参照できるように手動で修正する必芁がありたす:

{
  "paths": {
    "@foo/*": ["foo__*"]
  }
}

ラむセンス

このプロゞェクトは MIT License でラむセンスされおいたす。

型定矩ファむルの著䜜暩は、各定矩ファむルの冒頭に掲茉されおいるコントリビュヌタヌそれぞれに垰属したす。