47 KiB
Definitely Typed
é«å質㪠TypeScript ã®åå®çŸ©çšã¬ããžããª
ãã® README ã¯è±èªã»ã¹ãã€ã³èªã»éåœèªã»ãã·ã¢èªã»äžåœèªã»ãã«ãã¬ã«èªã§ãé²èЧã§ããŸãïŒ
管çè çšããã¥ã¢ã« ã¯ãã¡ã
çŸåšã®ã¹ããŒã¿ã¹
ãã®ã»ã¯ã·ã§ã³ã§ã¯ã¬ããžããªãšå ¬éããã»ã¹ã®çšŒåç¶æ³ã远跡ã§ããŸãã PR ãããã±ãŒãžã«äœãäžå ·åãããå Žåã¯ããããã圹ã«ç«ã€ãããããŸããã
- çŽè¿ã®ãã«ãã®åãã§ãã¯ãš Lint ãæ£åžžçµäºããã:
- 次ããŒãžã§ã³ã® TypeScript äžã§å
šããã±ãŒãžã®åãã§ãã¯ãš Lint ãæ£åžžçµäºããã:
- 1æé以å
ã«å
šããã±ãŒãžã npm ã«å
¬éãããŠããã:
- Definitely Typed äžã§ typescript-bot ãã¢ã¯ãã£ããã©ãã:
- çŸåšã®éçšåºç€ã®ã¹ããŒã¿ã¹æŽæ°
æ²èŒãããŠãããã®ã§äœããæ£åžžã§ã¯ãªãã£ãããçµæã倱æã«ãªã£ãŠãããã®ãããå Žåã¯ã 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 ïŒ3.9 以åïŒ
Definitely Typed ã§ã¯ããªãªãŒã¹ãã2幎以å
ã®ããŒãžã§ã³ã® TypeScript äžã§ã®ã¿ããã±ãŒãžã®ãã¹ãã宿œããŠããŸãã
çŸæç¹ã§ã¯ããŒãžã§ã³ 4.0 以äžã§ãã¹ããããŠããŸãã
TypeScript 2.0 ïœ 3.9 ã䜿çšããŠããå ŽåãåŒãç¶ã @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 ã®ã©ã€ããµã€ã¯ã«ãç°¡åã«ç€ºãããã®ã§ãã
æ¢åã®ããã±ãŒãžãç·šéãã
cd types/<ç·šéãããããã±ãŒãžå>ãå®è¡ã- 倿Žãå ããããã¹ããç·šéããã®ãå¿ããã«è¡ãã ç Žå£çãªå€æŽãå ãããšãã¯ãå¿ ãã¡ãžã£ãŒããŒãžã§ã³ãæŽæ°ããã
npm test <ãã¹ããããããã±ãŒãžå>ãå®è¡ã
æ¢åã®ããã±ãŒãžãç·šéãã 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ã€éžæè¢ããããŸã:
- ã¢ãžã¥ãŒã«ã®å®è¡ç°å¢ã§é ECMAScript ã¢ãžã¥ãŒã«åãã®çžäºéçšäœç³»ãæŽã£ãŠããå Žåãã€ãŸãããã©ã«ãã€ã³ããŒããããªãã®ç°å¢ïŒ Webpack ã SystemJS ã esm ãªã©ïŒã§åäœããå Žåã¯ã
--allowSyntheticDefaultImportsã³ã³ãã€ã©ãŒ ãªãã·ã§ã³ã䜿çšã§ããŸãã - TypeScript åŽã«é ECMAScript ã®å¯Ÿå¿ãããããå Žåã¯ã
--esModuleInteropã³ã³ãã€ã©ãŒ ãªãã·ã§ã³ã䜿çšã§ããŸãïŒ TypeScript 2.7 以éïŒã
ããã±ãŒãžã§ã¯ 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 å
¬åŒããã¥ã¡ã³ãã確èªããŠãã ããã
以äžã«ãç°¡æçãªäŸã瀺ããŸã:
-
package.jsonãããã±ãŒãžã«è¿œå ããæ¬¡ã®å 容ãèšè¿°ãã:{ "private": true, "types": "index", "typesVersions": { "<=3.6": { "*": ["ts3.6/*"] } } } -
åå®çŸ©ã®ãã£ã¬ã¯ããªå ã«ã
typesVersionsã«æå®ãããµããã£ã¬ã¯ããªïŒäžã®äŸã§ã¯ts3.6/ïŒãäœæãããts3.6/ã TypeScript 3.6 以äžçšã®ãã£ã¬ã¯ããªã«ãªãã®ã§ãæ¢åã®åå®çŸ©ãšãã¹ããããã«ã³ããŒãããåå®çŸ©ãã¡ã€ã«ã®ããããŒã¯
index.d.tsã®ã¿ã«ããã°ããã®ã§ãts3.6/index.d.tsããã¯åé€ããã -
ts3.6/tsconfig.jsonã®baseUrlã»typeRootsãªãã·ã§ã³ã«æ£ãããã¹ãæå®ãããæ¬¡ã®ãããªå€ã«ãªãã¯ãã§ã:{ "compilerOptions": { "baseUrl": "../../", "typeRoots": ["../../"] } } -
ããã±ãŒãžã®ã«ãŒãã«æ»ãã䜿çšããã 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/ïŒãäœæããçŸåšã®ããŒãžã§ã³ã®ãã¡ã€ã«ãã³ããŒããŠãã ããã
ã«ãŒããã©ã«ããŒã¯å¿ ãææ°ã®ïŒãæ°ãããïŒããŒãžã§ã³ã®åå®çŸ©ãå«ãŸããããã«ãªãã®ã§ãå€ãããŒãžã§ã³çšã®ãµããã©ã«ããŒå ã®ãã¡ã€ã«ã«ãããŠããã¡ããšçžå¯Ÿãã¹ãã«ãŒããã©ã«ããŒã§ã¯ãªããµããã©ã«ããŒã«åãããã«å€æŽããå¿ èŠããããŸãã
tsconfig.jsonãštslint.jsonå ã®çžå¯Ÿãã¹ãæŽæ°ããã- ãã¹ããæå³ããããŒãžã§ã³ã§å®è¡ãããããã«ããã¹ã®å€æã«ãŒã«ã远å ããã
ããšãã°ã 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ïŒã远å ããå¿ èŠããããŸãã å€ãããŒãžã§ã³ã«å¯Ÿå¿ããŠããªãããã±ãŒãžã«ããã«äŸåããŠããããã±ãŒãžã«å¯ŸããŠããååž°çã«è¡ãå¿ èŠããããŸãã
ããšãã°ã react-router 㯠history@2 ã«äŸåããŠããããã react-router ã® tsconfig.json ã«ã¯ "history": [ "history/v2" ] ãšãããã¹å€æã远å ãããŠããŸãã
ããã«ã react-router ã«äŸåããŠãã react-router-bootstrap ã§ãã react-router ãææ°çã«æŽæ°ããããŸã§ã®éã tsconfig.json ã®äžã§åæ§ã®ãã¹å€æïŒ"history": [ "history/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 ã§ã©ã€ã»ã³ã¹ãããŠããŸãã
åå®çŸ©ãã¡ã€ã«ã®èäœæš©ã¯ãåå®çŸ©ãã¡ã€ã«ã®åé ã«æ²èŒãããŠããã³ã³ããªãã¥ãŒã¿ãŒããããã«åž°å±ããŸãã