xxxx/xxxx.d.ts
ãã¡ã€ã«ã䜿çšããããšããŸããããåé¡ãçºçããŸãããxxxx/xxxx.d.ts
ã«ã€ããŠã話ãããããšæããŸããä»æ¥ã@ type/superagentã®ãšã©ãŒãåå ã§ãã«ãã倱æãå§ããŸãã åé¡ãããŒãžã§ã³2.0.34ããå§ãŸãããšãããããŸã§ãããŒãžã§ã³çªå·ãäžãå§ããŸãã ãã以åã¯ãTypescriptã³ã³ãã€ã©ã«ãã£ãŠãšã©ãŒã¯çæãããŸããïŒããŒãžã§ã³2.1.0-dev.20161017ã䜿çšïŒ
@ types / [email protected]ã®å Žåããšã©ãŒã¯æ¬¡ã®ãšããã§ãã
node_modules / @ types / superagent / index.d.tsïŒ79,12ïŒïŒãšã©ãŒTS2304ïŒåå'XMLHttpRequest'ãèŠã€ãããŸããã
@ types / [email protected]ã®å Žåããšã©ãŒã¯æ¬¡ã®ãšããã§ãã
node_modules / @ types / superagent / index.d.tsïŒ79,12ïŒïŒãšã©ãŒTS2304ïŒåå'XMLHttpRequest'ãèŠã€ãããŸããã
ãã®æ å ±ãçããã®ã圹ã«ç«ãŠã°å¹žãã§ãã
tscã«--lib dom
ãªãã·ã§ã³ã䜿çšããŠããŸããïŒ
ããããããŸããã ãããŠãããã圹ç«ã€ãã©ããã¯ããããŸããããå®éã«ã¯ç§ã®çŽæ¥ã®äŸåé¢ä¿ã¯æé«ã§ãã ãµãŒããŒåŽã®ã³ãŒãã®åäœãã¹ãã«äœ¿çšããŸãã
@vvakame â $ tsconfig.json
ã®compilerOptions.lib
é
åã«$ "dom"
ãè¿œå ãããšãããŸããããŸããã ããã¯å°ãçŽæã«åããŠããããã§ãã ããã¯äºæ³ãããåäœã§ããå¿
èŠããããŸããããããšãäžæçãªåé¿çã§ããïŒ
å
責äºé
ïŒç§ã¯ã¹ãŒããŒãšãŒãžã§ã³ããŠãŒã¶ãŒã§ã¯ãããŸããã
æåŸ
ãããæ¯ãèããšæããŸãã
https://www.npmjs.com/package/superagent
æµæ¢ãªAPIãåãããšã¬ã¬ã³ãã§æ©èœè±å¯ãªãã©ãŠã¶/ããŒãHTTP
åé¿çã
interface XMLHttpRequest {}
tsconfig.json
ã«"dom"
ãè¿œå ããéã®å¯äžã®åé¡ã¯ããã¡ã€ã«ã«lib
ã»ã¯ã·ã§ã³ããªãã£ãããšã§ããããã§ããã¡ã€ã«ã«$ïŒ$ 2 $ïŒ$ã»ã¯ã·ã§ã³ãå«ããå¿
èŠããããŸããããã©ã«ãã§"es2016"
ã®ãããªä»ã®ã©ã€ãã©ãªã
ãã¶ãããããä¿®æ£ããèªååãããæ¹æ³ããããŸããïŒ tsconfig.json
ãå€æŽããå¿
èŠã¯ãããŸãããïŒ
libã«["dom", "es2017"]
ãè¿œå ãããšããããä¿®æ£ãããŸããã
tsconfig.jsonã«ãdomããè¿œå ããéã®å¯äžã®åé¡ã¯ããµãŒããŒåŽã®ã³ãŒããèšè¿°ããŠããããšã§ãã ãããã£ãŠããã®libãè¿œå ããããšã¯ç§ã«ã¯æå³ããããŸããã XMLHttpRequestã¯Node.jsã«å梱ãããŠããããã¹ãŒããŒãšãŒãžã§ã³ãããã±ãŒãžã¯Node.jsã§ãšã©ãŒãã¹ããŒããŸããã§ããã åé¡ã¯ã @typingsããã±ãŒãžãæ¡ä»¶ä»ãã§XMLHttpRequestã䜿çšããŠããªãããšã ãšæããŸãã ããã±ãŒãžãNode.jsãšãã©ãŠã¶ãŒã§æ£åžžã«æ©èœããå Žåã¯ã @typingsãæ£åžžã«æ©èœããã¯ãã§ãã
ä»æ¥ãããã«ééããŸããã ç¹å®ã®ã¿ã€ããæ¡ä»¶ä»ãã§æäŸ/é€å€ã§ããªãå ŽåãããŒããšdomã®äœ¿çšã«ãããã®ã¿ã€ãã®2ã€ã®ããŒãžã§ã³ãæäŸããããšãæ€èšããå¿ èŠããããŸããïŒ
次ã®å 容ã®superagent.d.tsãã¡ã€ã«ãè¿œå ã§ããŸãã
// error TS2304: Cannot find name 'XMLHttpRequest'
declare interface XMLHttpRequest {}
// error TS2304: Cannot find name 'Blob'
declare interface Blob {}
@vvakameããŒããŸãã¯DOMã§äœ¿çšããããã«èšèšãããã©ã€ãã©ãªã§ã¯ãäž¡æ¹ã®ç°å¢ã§äž¡æ¹ã®åæå®ãå¿ èŠã«ãªããããå®éã«ã¯ãäºæãããåäœãã§ã¯ãããŸããã ãã®ã©ã€ãã©ãªã䜿çšããã«ã¯ãããŒãå ã®ãã©ãŠã¶ã°ããŒãã«ã«ã¢ã¯ã»ã¹ãããšãã«ã³ã³ãã€ã©ã®èŠåã衚瀺ãããªãããããã°ãç°¡åã«åŒãèµ·ããå¯èœæ§ã®ããåãè¿œå ããå¿ èŠããããŸãã
https://github.com/strongloop/loopback-nextã§ãããã«åãŸããŠããŸãã dom
libãè¿œå ãããšãã°ããŒãã«åå空éãNode.jsã«ååšããªãRequest
ã®ãããªã¿ã€ãã§çªç¶æ±æãããŸã
HTTPãµãŒããŒã¹ã¿ãã¯ãäœæããŠããã®ã§ãéåžžã¯import {ServerRequest as Request} from 'http'
ãå®è¡ããŸãã ãã ãããã®è¡ã誀ã£ãŠçç¥ãããå ŽåããŸãã¯ServerRequest
ãRequest
ãšããŠãšã€ãªã¢ã¹ãããŠããªãå ŽåãTypeScriptã¯ã³ãŒããæ£åžžã«ã³ã³ãã€ã«ããå®è¡æã«ã®ã¿ãšã©ãŒãæ€åºãããŸãã ã€ãŸããTypeScriptã¯ã³ã³ãã€ã«æã«ãšã©ãŒããã£ããã§ããªããªããç®çãæãããªããªããŸãã
ç§ã¯æ°ãããããžã§ã¯ããå§ããã°ããã§ãsupertestããchai-httpã«åãæ¿ããããšã§ãããåé¿ã§ãããšæããŸããããchai-httpã¯@ types/supertestã䜿çšããŠããŸãã -_-
åé¿çã¯æ¬¡ã®ãšããã§ãïŒ https ïŒ//github.com/jwalton/node-supertest-fetch
ããã«é¢ããæŽæ°ã¯ãããŸããããããšãä¿®æ£ã¯ãããŸãããïŒ @zephyrecãæãè¯ããšæããŸããå€ãã®äººãããããµãŒããŒåŽïŒã€ãŸãããŒãïŒã«äœ¿çšããŠããŸãã
ããã«é¢ããæŽæ°ã¯ãããŸããïŒ
ç°¡åãªåé¿çã¯ãå
ã®ãã¹ããæ¡åŒµããŠåŸ®èª¿æŽãããã¹ããå®è¡ããããã«ãå¥ã®ã¿ã€ãã¹ã¯ãªããæ§æã䜿çšããããšã§ãã ãããã£ãŠããã¡ã€ã«tsconfig.test.json
ãäœæããŸãã
{
"extends": "./tsconfig.prod.json",
"compilerOptions": {
"lib": ["dom", "..."] // supertest requires dom for type definitions to work
}
}
ïŒãŸãã¯ãã©ã€ãã©ãªã埮調æŽãã代ããã«ã³ã³ãã€ã©ãã©ã°skipLibCheck:true
ãèšå®ããããšãã§ããŸããããã«ããããã¹ãŠã®node_modules
ã®åãã§ãã¯ãã¹ããããããŸãïŒ
ts-jest
ã䜿çšããŠããå Žåã¯ã次ã®æ¹æ³ã§æ§æã䜿çšããããã«æ瀺ã§ããŸãã
"jest": {
"globals": {
"ts-jest": {
"tsConfig": "tsconfig.test.json"
}
}
}
ãã®ããã«ããŠãéåžžã®ã³ãŒãã§åã®å®å šæ§ãç ç²ã«ããããšã¯ãããŸãããããã¯ééããªã倱æã§ãïŒãããè¡ãåã«ãããŒãããŒãã§ã¹ãŒããŒãã¹ããããããããŸãïŒã
https://github.com/DefinitelyTyped/DefinitelyTyped/pull/33517ã¯ãã®åé¡ãä¿®æ£ããŸããããã®PRã¯ãšã©ãŒã«ãã£ãŠããŒãžãããããšã§é²æ¢ãããŸã
chai-http depends on superagent but has a lower required TypeScript version
ããã¯ã@ types /superagentã«äŸåãããã¹ãŠã®@typesããã±ãŒãžãTypeScriptèŠä»¶ã3.0+ã«æŽæ°ãããŸã§ã@ types/superagentãTypeScriptèŠä»¶ã3.0+ã«æŽæ°ã§ããªãããšãæå³ãããšè§£éããŸãã ç§ã«ã¯ã @ typesã·ã¹ãã ã®æ¬ é¥ã®ããã«æããŸãããªããªããTypeScriptããŒãžã§ã³ããç§ã«äŸåãããã¹ãŠã®ãã®ã®äžã§æãå€ãTypeScriptããŒãžã§ã³ã«åºå®ããŠããããã§ãã
ãã®ãšã©ãŒã¡ãã»ãŒãžã®ç§ã®ç解ã確èªã§ãã人ã¯ããŸããïŒãããããªãããããåé¿ããæ¹æ³ã¯ãããŸããïŒ
ãã®PRã®ãããªããè¯ãæä¹ çãªä¿®æ£ããªãå Žåãç§ã¯æ¬¡ã®ããã«ããŠã¢ããªã±ãŒã·ã§ã³ã®åé¡ã解決ããŸããã
/// <reference lib="dom" />
import request = require('supertest');
ãã®ãããªãã«ã¹ã©ãã·ã¥ãlibãã£ã¬ã¯ãã£ãã¯ãTypeScriptããŒãžã§ã³3.0以éã§æ©èœããŸãã
ãã®å·ãçºè¡ãããŠããçŽ2ã5幎ã«ãªããŸãã ã©ãããã°ããã解決ã§ããŸããã
FWIWãTypeScriptã®ã³ã³ãã€ã©ãªãã·ã§ã³skipLibCheck
ãæå¹ã«ãããšãåé¡ã¯è§£æ±ºããŸãã
skipLibCheck
ãæå¹ã«ãªã£ãŠããå ŽåãTypeScriptã¯.d.ts
ãã¡ã€ã«ããã§ãã¯ããŸãã- @types/superagent
ã®ãããªäŸåé¢ä¿ããã ãã§ãªãããããžã§ã¯ãã«ããå¯èœæ§ã®ãã.d.ts
ãã¡ã€ã«ããã§ãã¯ããŸããã ã©ã€ãã©ãªããdom
ãåé€ãããšãã³ã³ãã€ã©ã¯ãã以äžæå¥ãèšããŸããã
è¯ãå¯äœçšãšããŠã skipLibCheck
ã¯éåžžããã«ãé床ã倧å¹
ã«åäžãããŸãã
@bajtosåã®å®å šæ§ãäœäžããããããšã©ãŒãçºçããå¯èœæ§ããããŸãã
lib: [ "es6" ]
ã¯æ©èœããŸããtarget: "es2016+"
ãç§ã®ããã«åãã@ G-Rathç§ã誀解ããªãéããskipLibCheckã¯ã³ãŒãã®åå®å šæ§ãäœäžãããããšã¯ãªããd.tsãã¡ã€ã«ã®ã¿ã§ããããã®ã»ãšãã©ã¯ããŒãã¢ãžã¥ãŒã«ã®äžéšã§ãããã³ãŒãã§ã¯ãªãå¯èœæ§ããããŸãã
skipLibCheckã«é¢ããŠã¯ãããã¯å®è¡å¯èœãªåé¿çIMOã§ã¯ãããŸããã https://stackoverflow.com/questions/52311779/usage-of-the-typescript-compiler-argument-skiplibcheckãã"ãšã©ãŒã®å 容ã«ãã£ãŠã¯ãã³ã³ãã€ã©ãã³ãŒãã®ä»ã®å Žæã§åé¡ãåŒãèµ·ããæ¹æ³ã§ãšã©ãŒããå埩ããå ŽåããããŸãïŒããšãã°ã誀ã£ãåãanyã«çœ®ãæãããªã©ããŠïŒæ°ä»ãããªãããã«ãããããåãšã©ãŒãæå¶ããïŒ--skipLibCheckã// @ ts-ignoreããŸãã¯ãã®ä»ã®æ段ã®ããããã«ãã£ãŠïŒã®ã¯å±éºãªæ¹æ³ã§ããã
@carnesenããªãã¯ããã«ç§ãè³ããŸãã-ããã¯ç§ãåŒçšããããšããŠããæ£ç¢ºãªstackoverflowã®è³ªåã§ããïŒjoyïŒ
@rjmunroããã«è¡ããŸãð
// @ts-ignore
ã»ã©æªãã¯ãããŸããããç¹ã«node_modules
ãã©ã«ããŒã.d.ts
ã§æ§æãããŠãããããåãšã©ãŒãæå¶ãããã®ã¯ãã³ãŒãã®åã®å®å
šæ§ãæè¡çã«åŒ±ããŸãã TSããã¹ãŠãå
¥åããããã«äœ¿çšãã
æãã¯ãªãŒã³ãªãœãªã¥ãŒã·ã§ã³ã¯ã@ carnesenã«ããPRïŒ 33517ã§ããããã¯ã$ïŒ Blob
ãšXMLHttpRequest
ãžã®åç
§ãããããã superagent
ã¿ã€ãå®çŸ©ãžã®å€éšåç
§ãšããŠdom
ã©ã€ãã©ãªãè¿œå ããŸãã XMLHttpRequest
ã¯ã superagent
åå®çŸ©ã§å¿
èŠã§ããã䜿çšæ¹æ³ïŒ_browserãšnode_ïŒã«ãã£ãŠã¯ãå®è£
ã§ã¯å¿
èŠãããŸããã
å¯äžã®æ¬åœã®æ¬ ç¹ã¯ãlibãªãã¡ã¬ã³ã¹ãçŽ9ãæåã«ãªãªãŒã¹ãããtypescriptããŒãžã§ã³3.0.0ãå¿
èŠãšããããšã§ãã
ãããchai-httpïŒ Travis-CIãåç
§ïŒã«ã®ã¿åœ±é¿ããã®ãããããšãtypescriptããŒãžã§ã³ã3.0.0ã«äžããå¿
èŠãããä»ã®äŸåé¢ä¿ãããã®ãââã¯ããããŸããã
æŽæ°ã¯ãããŸããïŒ åã³2ã¶æåŸã§ã...
ããããã¹ãŠèªãã åŸãçŸåšå©çšå¯èœãªæãã¯ãªãŒã³ãªãœãªã¥ãŒã·ã§ã³ã¯@carnesenããã®ãã®ã§ãããç§ã«ã¯æ©èœããŸãã:-(
/// <reference lib="dom" />
import request = require('supertest');
圌ã®PRïŒhttps://github.com/DefinitelyTyped/DefinitelyTyped/pull/33517ïŒã確èªããŸãããã chai-http
ã¯3.0ããåã®TSããŒãžã§ã³ãå¿
èŠãšããªããããTravisCIãšã©ãŒã¯æå³ããããŸãã...
ç§ã¯TypeScriptã«ããªãæ £ããŠããªãã®ã§ãäœãééã£ãããšãããŠããå Žåã¯ç¥ãããŠãã ããã @carnesenãæ°ããPRã§è¡ã£ãã®ãšãŸã£ããåãã³ãŒããéä¿¡ããŠãTravis CIãã°ãããã«æ·±ãæãäžããŸããïŒhttps://github.com/DefinitelyTyped/DefinitelyTyped/pull/36282ïŒ
ç·šéïŒ
chai-http
ã¯ããåé¡ã§ã¯ãªãããã§ããã promisify-supertest
ã¯...ããŸã人æ°ã®ãªãæŸæ£ãããããã±ãŒãžã®ããã§ãïŒhttps://github.com/ariporad/promisify-supertest/blob /master/test/index.jsïŒ
ãããæŽæ°ããããã®ããã»ã¹ã¯äœã§ããïŒ
ç·šé2ïŒ
æ·±ãæãäžããŠã¿ããšã次ã®åå®çŸ©ãæŽæ°ããå¿ èŠãããããšãããããŸããã
//ãšã©ãŒTS2304ïŒåå'XMLHttpRequest'ãèŠã€ãããŸãã
ã€ã³ã¿ãŒãã§ã€ã¹XMLHttpRequestã宣èšããŸã{}
//ãšã©ãŒTS2304ïŒåå'Blob'ãèŠã€ãããŸãã
ã€ã³ã¿ãŒãã§ã€ã¹Blobã宣èšããŸã{}
@JasonKlebanãã®ãã¡ã€ã«ã¯ã©ãã«è¡ããŸããïŒ node_modules
> superagent
ïŒ ç§ã¯ãããç解ããããšããŠããŸããããããŠç§ã¯ç§ã®ç¥æµã®çµããã«ããŸãã
@mikeyamato-ã©ãã§ããŸã䜿çšãããæãåºããŸãããããããã®ãã¡ã€ã«ãèªåã§ç®¡çããŠããªããããnode_modulesã§ã¯èŠããŠããŸããã 代ããã«ãããããä»ã®ãœãŒã¹ãã¡ã€ã«ãšäžŠãã§ããŸãã ããªãã¯æåã«ãããè©Šã¿ãã§ããããç§ã¯æšæž¬ããŸãã å€åãªãïŒ
tsconfig.jsonã¿ã€ãã³ã°ãã©ã«ããŒèšå®ãè©Šãããšãã§ããŸããïŒ
ç·šéïŒããã远跡ããããã«æ°ããåé¡ãéããŸããïŒïŒ41425
ïŒ36282ã®ããŒãžã«äŒŽããæ°ããåé¡ãçºçããŸãã ããŒãã®ã¿ã®ãããžã§ã¯ãã§ã¹ãŒããŒãšãŒãžã§ã³ãã䜿çšããå Žåãããªãã«ã¹ã©ãã·ã¥ãã£ã¬ã¯ãã£ãã®å°å ¥
/// <reference lib="dom" />
ãã®çµæãDOMã¿ã€ãã³ã°ããããžã§ã¯ãã«ééçã«è¿œå ãããŸãã ãã ããããã¯ããŒãã®ã¿ã®ãããžã§ã¯ãã§ãããããDOMããªãããã次ã®ãããªã³ãŒãã䜿çšããŸãã
window.setTimeout()
TypeScriptãšã©ãŒãçºçããã¯ãã§ãã DOMåä»ãã¯é»ã£ãŠå«ãŸããŠãããããããã¯åœãŠã¯ãŸãããã³ãŒãããŒã¹ã«åŸ®åŠãªãã°ãåŒãèµ·ããå¯èœæ§ããããŸãã
ããŒãã®ã¿ãŸãã¯ãã©ãŠã¶ãŒã®ã¿ã®å ¥åããããžã§ã¯ãã«å«ããŠãã©ã¡ãã䜿çšããããéžæã§ããæ¹æ³ã¯ãããŸããïŒ
äŸåé¢ä¿ãæã€ããšã®ãã1ã€ã®å¯äœçšã¯ã dom
ã§ã supertest
ïŒ superagent
ïŒãlib: webworker
ã®ãããžã§ã¯ãã§äœ¿çšãããªãããšã§ããåç
§ïŒ httpsïŒ //github.com/microsoft/TypeScript/issues/20595ã ç§ãèŠãéããããã¯ä»¥åã«èšåãããŠããŸããã
$ npm i @ types / superagent @ latest -D
ããªãã¯ãè¡ãå¿ èŠããããŸãïŒ
æãåèã«ãªãã³ã¡ã³ã
tsconfig.jsonã«ãdomããè¿œå ããéã®å¯äžã®åé¡ã¯ããµãŒããŒåŽã®ã³ãŒããèšè¿°ããŠããããšã§ãã ãããã£ãŠããã®libãè¿œå ããããšã¯ç§ã«ã¯æå³ããããŸããã XMLHttpRequestã¯Node.jsã«å梱ãããŠããããã¹ãŒããŒãšãŒãžã§ã³ãããã±ãŒãžã¯Node.jsã§ãšã©ãŒãã¹ããŒããŸããã§ããã åé¡ã¯ã @typingsããã±ãŒãžãæ¡ä»¶ä»ãã§XMLHttpRequestã䜿çšããŠããªãããšã ãšæããŸãã ããã±ãŒãžãNode.jsãšãã©ãŠã¶ãŒã§æ£åžžã«æ©èœããå Žåã¯ã @typingsãæ£åžžã«æ©èœããã¯ãã§ãã