http://docs.feathersjs.com/frameworks/angular2.html
ä»ãã¢ã¯äœ¿çšããŸã
const feathers = require('feathers/client');
const socketio = require('feathers-socketio/client');
const io = require('socket.io-client');
const localstorage = require('feathers-localstorage');
const hooks = require('feathers-hooks');
const rest = require('feathers-rest/client');
const authentication = require('feathers-authentication/client');
import
ã䜿çšããã«ã¯ãTypeScriptå®çŸ©ããµããŒãããŠãã ããã
ãããã¡ããã©httpsïŒ//github.com/feathersjs/feathers/issues/64ãèŠãŸãã
ãããåé²ãããæè¯ã®æ¹æ³ã¯ãããã€ãã®åºæ¬çãªTypescriptå®çŸ©ã䜿çšããŠãªããžããªãéå§ãïŒïŒ64ã§ãéå§ããå Žæã«é¢ããããã€ãã®ãã€ã³ã¿ãæçš¿ããŸããïŒãç¶è¡ããããšã§ãã
ããã§ã®è°è«ã
ãã®å·ã¯ããš1ã2ãæã¯éãããŸãŸã«ããŠããããšãã§ããŸãããä»ã®å·ã¯ã»ãŒ1幎ééããŠããŠã誰ãåãäžããŸããã§ããã ããã«èšèŒãããŠããããã«ãçŸåšã®ã³ã¢ããŒã ã¯TypescriptãŸãã¯Angularã䜿çšããŠããªããããå®éã«ã¯ã¬ãŒããŒã«èŒã£ãŠããŸããïŒãããŠãè¿ãå°æ¥ã«å¯ŸåŠãããå¯èœæ§ãããå Žåã«ã®ã¿ãåé¡ãéãããŸãŸã«ããŠããããšããå§ãããŸãïŒã
@harangueã¯ããã€ãã®åºæ¬çãªå®çŸ©ã«åãçµãã§ãããšæããŸãã ãã¶ããSlackã§åœŒããããã«äœãå Žæã«ã€ããŠã®è°è«ãåããããšãã§ããŸããïŒ
æ¿ç¥ããŸããïŒ ãã®åé¡ã解決ããå¿ èŠãããå Žåã¯ãå ã«é²ãã§ãã ããã
typescriptããµããŒãã§ããã°æ¬åœã«ããã§ããã..ã©ãããã°æäŒãããšãã§ããŸããïŒ
@rollymadukç§ã¯Feathersã®å®çŸ©ã«ã€ããŠããçšåºŠã®é²æ©ãéããŸããããããããé åžããããã®æè¯ã®æ¹æ³ããŸã 確ç«ããŠããŸããïŒãããŠãTypeScript 2ããªãªãŒã¹ãããããšããŠããã®ã§å°ãéæž¡çã§ãïŒã ãããŸã§ã«äœãã解決ãããå Žåã¯ãç§ãåãçµãã ãã®èŠç¹ããŸãã
@harangueæ¬åœã«çŽ æŽãããä»äºã§ãå®éã«ã¯ããªãæºåãã§ããŠããããã«èŠããŸãã泚æãå¿ èŠãªé åã«ã¯ãèªèšŒããããã€ããŒïŒrestãsocke.ioãprimusïŒãdbã¢ããã¿ãŒãªã©ã®åºæ¬çãªãã©ã°ã€ã³ãçµã¿èŸŒãŸããŠãããšæããŸãã ããããé åžããæè¯ã®æ¹æ³ãšã¯ã©ãããæå³ã§ããïŒ
ããã«ã€ããŠãŸã 話ãåã£ããã©ããã¯ããããŸããããTypescriptå®çŸ©ãç¶æããææ°ã®ç¶æ ã«ä¿ã€äººãããéããã¡ã€ã³ãªããžããªã§Typescriptå®çŸ©ãé åžããŠãåé¡ãªããšæããŸãã ãããã£ãŠãæºåãã§ããããFeathers 2.1ãªãªãŒã¹ã®äžéšã«ããããšãã§ããŸãïŒããã«ã¯ããµãŒãã¹ã®ã³ãŒã«ããã¯ãv3ã§éæšå¥šã«ãªããªã©ã®èŠåãå«ãŸããŠããå¯èœæ§ããããŸãïŒã
TypeScriptçšã® generator-feathers
ãã©ãŒã¯ã¯ãããŸããïŒçºé»æ©ã®TSãã©ãŒã¯ã«èå³ããããŸããïŒ
ç·šéïŒãžã§ãã¬ãŒã¿ãŒããã©ãŒã¯ããæåã®ã³ããããããã·ã¥ããŸããã
ãããã£ãŠã @ harangueã¯ãã§ã«https://gist.github.com/harangue/9d4ed79118e2656f5e3d2d699296ed36ã«ããFeathersTypescriptå®çŸ©ã®å€§èŠæš¡ãªã»ãããã»ãŒå®è£ ããŠããŸããã¬ãã¥ãŒããŠãå Žåã«ãã£ãŠã¯ãã¡ã€ãã©ã€ãºããŠãTypeScriptå®çŸ©ãªããžããªã«éä¿¡ããå¿ èŠããããŸãã
幎æ«ãŸã§ã«äžéžããAukãªãªãŒã¹ã®ãã®éšåãäœæããŸãã ãããŸã§èª°ãã¹ãããã¢ããããªãå Žåããã®åé¡ã¯å®å šã«ã¯ããŒãºãããTypeScriptã®å ¬åŒãµããŒãããå šäœã®ãã«ãªã¯ãšã¹ã以å€ã®ããã«é¢ãããããªãè°è«ã¯ãããŸããã
ãããã®å質ãè¯å¥œãªå Žåã¯ãå®çŸ©ããã§ã¶ãŒãšãã³ãã«ããããšãæ€èšããå¿ èŠããããŸãã å€ãã®äººã¯ãã»ã«ã³ããªããã±ãŒãžãããŒãžã£ãŒã®äœ¿çšãã§ããã ãé¿ããããšæãã§ãããã
ãããã¯npm i @types/feathers
ä»ããŠã€ã³ã¹ããŒã«å¯èœã§ãã typings
ãããªãã®ã¯ããå¿
èŠãããŸããã
https://github.com/DefinitelyTyped/DefinitelyTypedã«è¿œå ããã ãã ãšæããŸãã
DefinitelyTyped FAQããïŒ
types-2.0ãã©ã³ãã¯ãtypes-publisherã®ãããã§ãNPMã®@typesã¹ã³ãŒãã«èªåçã«å ¬éãããŸãã ããã¯éåžžãå€æŽãããŒãžãããŠãã1æé以å ã«çºçããŸãã
ãããç¥ããŸããã§ããã ãããã£ãŠãããããDefinitelyTypedã«è¿œå ããã ãã§ååã§ãã
ãããJSã ããªãã¯1ã2ãæéå»ãããšã³ã·ã¹ãã ã¯é²åããŸãïŒsmileïŒ
é·ãéãç§ã®åŽã§ããã«ã€ããŠã©ãžãªã®æ²é»ããã£ãããšãæ®å¿µã«æããŸãã ç§ã¯ä»æ¥ãå€ãã¿ã€ãã³ã°ã§æ±ããŠããããã€ãã®åé¡ãä¿®æ£ããèŠç¹ã®å¥ã®ãªããžã§ã³ã
èŠæšã«ååšããå®çŸ©ã¯ã1ïŒã¿ã€ãã³ã°ãã¹ãïŒFeathersããã¥ã¡ã³ãããããã€ãã®äŸããã«ããå¿ èŠãããïŒãš2ïŒJS Docã¢ãããŒã·ã§ã³ïŒã€ã³ããªã»ã³ã¹ã«ã¯é©ããŠããŸãããå¿ é ã§ã¯ãããŸããïŒã
æè¡çã«ã¯ãããã¯ã®ã¿ã€ãã¯ãã§ã¶ãŒããã¯ã«ãæœåºããå¿
èŠããããŸãã ãã ããããã§åæå®ãæ¡åŒµãããšãéçåã§è€è£œããã®ãå°ãé£ããããã¯ã¹ã€ã³ãã¿ãŒã³ãuberproto
ã«ãããããå°ãé¢åã«ãªããŸãã
@harangueã«æ»ã£ãŠããã ãããããšãããããŸãã ããã¯ãã³ã¢ã®äžéšã«ããããšãèšç»ããŠããã®ã§ãããã§ã¯ããã¯ã®å
¥åããã®ãŸãŸã«ããŠããããšãã§ãããšæããŸãïŒïŒ408ãåç
§ïŒã ãŸããhttpsïŒ//blog.feathersjs.com/feathers-application-and-error-hooks-7a5982e70024ã§èª¬æãããŠããããã«ãæ°ãã.hooks
ã¡ãœããã§ã¿ã€ãã³ã°ãæŽæ°ããå¿
èŠãããå ŽåããããŸãïŒãŸã ææžåãããŠããããäœæ¥äžã§ãïŒ :)ã
@harangueãã€ããªãã¯ããªãã®ã¿ã€ããééããªãã¿ã€ãããããã®ã«æåºãããšæããŸããïŒ
ã¿ãªãããããã«ã¡ã¯ãTypeScriptã®å®çŸ©ãç»å Žããã®ãèŠãã®ã¯æ¬åœã«ã¯ãŒã«ã§ãã @harangue ãfeathers
ã©ã€ãã©ãªã«äžèŽããåå空éããšã¯ã¹ããŒãããŠããªãããã import ... from 'feathers'
ã¯ãšã©ãŒãã¹ããŒããŸãã
ãã@subvertallchris ãããªãã¯äœ¿ãããšãã§ããŸã
import * as feathers from 'feathers';`
ãŸã
import feathers = require('feathers');
ãããã¯åçã§ãã :)åã³ãã§ã¶ãŒãºã®æéãåãããšæã£ããšããä»ã®ããšã«å·»ã蟌ãŸããŸããããæ°å¹ŽãŸã§ã«ãããã®å®çŸ©ãå®å šã«å ·äœåãããããšãæãã§ããŸãã
@ j2L4e TSãžã§ãã¬ãŒã¿ãŒãã©ãŒã¯ã404ã«ãªã£ãŠããããã§ããïŒ ããã«é¢ãããã¥ãŒã¹ã¯ãããŸããïŒ ãŸãã @ harangueã¯ã©ãã§ããïŒ ç§ã¯ãã®åå°ãæ¬åœã«èŠãããšæã£ãŠãããTSå®çŸ©ãã¡ã€ã«ã®å®è£
ãåãã§ãæäŒãããŸãã feathers generate --ts
ãã©ã°ãä»ãããã©ãŒã¯ã§ãCLIã§Typescriptãããã¥ã¡ã³ããããŸãåçã§ããŸãã ãç¥ããäžããã
ç¶æããã®ã¯é£ãããmysqlãšããŒã«ã«èªèšŒã§ã®ã¿é©åã«æ©èœããgenerator-feathersã¯ãšã«ããããã«å»æ¢ãããŸãã ã ããç§ã¯ãããå»æ£ããŸããã
æ°ããCLIã®ãªãªãŒã¹ãç±å¿ã«åŸ ã£ãŠããŸã
ã¢ã 19. Dezember 2016 14æ41å42ç§MEZãschriebã®georgeedwards [email protected] ïŒ
@ j2L4e TSãžã§ãã¬ãŒã¿ãŒãã©ãŒã¯ã404ã«ãªã£ãŠããããã§ããïŒ ããã«é¢ãããã¥ãŒã¹ã¯ãããŸããïŒ
ãŸãã @ harangueã¯ã©ãã§ããïŒ ç§ã¯ãããèŠãããšæã£ãŠããŸã
çéžããTSå®çŸ©ãã¡ã€ã«ã®å®è£ ãåãã§ãæäŒãããŸãã
feathers generate --ts
ãã©ã°ãä»ãããã©ãŒã¯ã§CLIãåçããŸã
ããŸãtypescriptãŸãã¯ããã¥ã¡ã³ãã ãç¥ããäžããã-
ããªããèšåãããã®ã§ãããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ããã
https://github.com/feathersjs/feathers/issues/381#issuecomment -267966376
ãã®åé¡ã«ãŸã åãçµãã§ãã人ã¯ããŸããïŒ ãã®ãããžã§ã¯ããTypescriptã§äœ¿çšããããšæããŸã
ããã«ã¡ã¯ãã¿ããª
å¬ããããšã«ïŒ_ã»ãŒå®äºã§ãã_ð
ç§ã¯FeatherjsOrgã§å€ãã®ãã©ãŒã¯ãäœæãããªããžããªã«ãã£ãŠå®çŸ©ãèšè¿°ããŸããã ãããŠãããªãã¯æé«ã®ã¿ã€ãã¹ã¯ãªããå®çŸ©ã§feathersjsã䜿ã£ãŠãã®ãµã³ãã«ãèŠãããšãã§ããŸã
Feathers + Nodejs + Typescript
FeathersClient + Aurelia + Typescript
[ã¯ããESNextãCommonjsãAMDãããã³ã¯ã©ã€ã¢ã³ããã£ã³ã¯ãžã®ã°ããŒãã«ã¢ãžã¥ãŒã«ããµããŒãããŠããŸã]
aureliaãµã³ãã«ã¯ãangular2ã®æäœæ¹æ³ã®æããããæäŸããŸãã ãããã®ãªããžããªã«ã¯ãtypescriptãã©ã€ãããã¥ã¡ã³ããæäŸããã®ã«ã©ã®ããã«åœ¹ç«ã€ãã«ã€ããŠå€ãã®è©³çŽ°ããããŸãã
ç§ã¯ããã«PRãè¡ããŸãããããªãã¯èŠãŠã質åãããŠãç§ã«ãã£ãŒãããã¯ãäžããããšãã§ããŸãã ðïŒ
ãã©ãŒã¯wihã®å®çŸ©ïŒ
å°ãä»äºããããŸãããã矜ãšã¿ã€ãã¹ã¯ãªããã倧奜ãã§ã
ããã¯ãã¹ãŠçžå¯Ÿçãªãªã³ã¯ã§ã
ãªã³ã¯ãä¿®æ£ããŸããã
@AbraaoAlvesããã¯çŽ æŽãããèŠããŸããããããšãïŒ ç§ã¯ã¡ããã©äžæ©å«ãªã³ã¡ã³ããæžããŠåé¡ãéããããšããŠããŸããããããŠããªããæåã«ã³ã¡ã³ãããŠãããŠããããã§ãðãã«ãªã¯ãšã¹ããèŠãã®ã楜ãã¿ã«ããŠããŸãïŒ
ããç·@AbraaoAlves ïŒ
@AbraaoAlvesæ¬åœã«ããããšããšèšãããã£ãã®ã§ãããããã¯ç§ã«ãšã£ãŠå€§ããªå©ãã«ãªããŸãïŒ ããªããæåŸã®ç¬éã«ãã£ãŠãããªããŠä¿¡ããããªã
@AbraaoAlvesç§ã¯ããªãã®å®çŸ©ã®ãããããå®éã«äœ¿çšããã®ã«åé¡ããããŸãã package.jsonã«ããã±ãŒãžãã€ã³ã¹ããŒã«ãããš
"feathers-errors": "^2.5.0",
"feathers-authentication": "^0.7.12",
"feathers-configuration": "^0.3.3",
"feathers": "https://[email protected]/AbraaoAlves/feathers.git#definition",
"feathers-hooks": "git://github.com/AbraaoAlves/feathers-hooks.git#definition",
"feathers-mongoose": "^3.6.2",
"feathers-rest": "git://github.com/AbraaoAlves/feathers-rest.git#definition",
"feathers-socketio": "git://github.com/AbraaoAlves/feathers-socketio.git#definition"`
ãããã£ãŠã次ã®ãããªTypeScriptãã¡ã€ã«ã§äœ¿çšããããšãããšæ¬¡ã®ããã«ãªããŸãã
import * as feathers from "feathers"
ã³ã³ãã€ã«ã«åæ ŒããŸãããå®éã«ã¯æ£ããå®è¡ãããŸããã
ã¿ã€ãå®çŸ©ã®ã¿ãã€ã³ã¹ããŒã«ãããœãŒã¹ã¯ã€ã³ã¹ããŒã«ããŸããã ãŸããfeathers-restã¯typescriptãèªèããé¢æ°ããšã¯ã¹ããŒãããªãããã§ãrest()' as a valid command for app.use(rest());
ãŸãããã1ã€ã®åé¡ãšããŠãapp.useã¯æ¬¡ã®ãããªåŒæ°ãåãå
¥ããªããªã£ãããã§ãã
this.app.use(bodyParser.json());
ãšããŠäœ¿çšããå¿ èŠããããŸã
this.app.use(bodyParser.json() as any);
@Chrisdf package.jsonã®tgzãã¡ã€ã«ã§ãããä¿®æ£ããä»ããã¯ããŒã³ãäœæããŠãããäžåºŠã€ã³ã¹ããŒã«ããŠã¿ãŠãã ããã
ããã«é¢ãã詳现ïŒåé¡
@AbraaoAlves DefinitelyTypedã«å®çŸ©ãå ¥ããªãçç±ã¯ãããŸããïŒ ãã®ããã«ããŠãNPMãã@typesåå空éãä»ããŠå©çšã§ããããã«ãªãããªãªãŒã¹ã®äžéšãšããŠå®çŸ©ãææ°ã®ç¶æ ã«ä¿ã€ããã®ã³ã¢ããŒã ã®èŠä»¶ãåé€ãããŸãã
@AbraaoAlvesãšããã§ããªãå®çŸ©ã¯ã³ããããããã代ããã«tarballãªãªãŒã¹ãšããŠæçš¿ãããã®ã§ããïŒ ãã®æ¹æ³ã§ã¯ã typings
ã§ããå€ãå©çšã§ããããã«ãªããŸãã ç§ã¯ãã®åªåã«éåžžã«æè¬ããå®çŸ©ã䜿çšå¯èœãªåœ¢åŒã§ã³ãã¥ããã£ã«æäŸããããšãæçã§ããããšã«åæããŸããDefinitelyTypedã¯è¯ãåãã«ãªãã§ãããã
@AbraaoAlvesãš@harangueã®äž¡æ¹ã®äœæ¥ã«åºã¥ããŠ
涌ããã ããã®ããã«ç§ãã¡ãã§ãã/ãã¹ãããšã¯ãããŸããïŒ ãã以å€ã®å Žåã¯ãDefinitelyTypedã«å«ãŸãããã®ãããã°ããã®åé¡ã解決ã§ãããšæããŸããïŒ
ãã®ãªããžããªãšpackage.jsonã«å«ããå¿
èŠããããŸã
ïŒå°ãªããšããããæè¯ã®ã±ãŒã¹ã§ãïŒ
ã¿ãªãããããã«ã¡ã¯/
å¿èãšãã£ãŒãããã¯ãããããšãã
@stevehipwellãš@daffl ïŒtypescriptå®çŸ©ãã¡ã€ã«ã¯ãããã¥ã¡ã³ããã©ã€ãããã¥ã¡ã³ãã®ãããªãã®ã ãš
ç§ã¯@typesãšDefinitlyTypedã€ãã·ã¢ãããç¥ã£ãŠããŸããããã¯ãJavaScriptã³ãã¥ããã£ã«ãšã£ãŠãjavascriptã®äººãå®çŸ©ã«ã€ããŠå¿é ããªãããã«ããããã«éèŠã§ãã
ä»æ¥ãäž¡æ¹ã1ã€ã®å Žæã§ã1ã€ã®ãªãªãŒã¹ã§ç¶æããæ©äŒãããã°ãéä¿¡ãšã©ãŒã®çºççã¯ã¯ããã«äœããªãããªãªãŒã¹ããšã«å ¬åŒã®å®çŸ©ãäœæãããŸãã
javascriptãããžã§ã¯ãã®äŸã¯ãç¬èªã®å®çŸ©ãç¶æããŠããŸãïŒ Aurelia ã Preact ã..ã
å šå¡ãåæããå Žåã¯ãPullRequestãªã³ã¯ã次ã«ç€ºããŸãã
åä»ããã¹ããèªååãªã©ãããã¹ãããšã¯ãŸã ãŸã ãããããããŸãããããã¯ãŸã å§ãŸã£ãã°ããã§ãã
Typescript S2 FeathersJSïŒ
ããã«ã¡ã¯ãã¿ããªã
ç§ã¯@AbraaoAlvesã«åæã
å®çŸ©ããããžã§ã¯ãã®ãªãªãŒã¹ãšåæããŠããããšã確èªããã«ã¯ããã§ã¶ãŒããŒã ããã®éææ§ãé«ããå¿ èŠããããŸãã ãããŸã§ã®ãšãããç§èªèº«ã®å®çŸ©ãæžããŠããéããªãªãŒã¹ã®çŸåšã®ç¶æ ãäœã§ãããã¯ããããŸããã ããã°ã¯ææ°ã®ç¶æ ã«ä¿ãããŠããããæå³ã®ãªãã³ãŒãããŒã ïŒv3ãaukãbuzzard ??ïŒãããã€ããããŸãã
@ AbraaoAlves-ããªãã®å®çŸ©ã¯è¯ãããã§ãããç§ãèŠãããšãã§ããããšããã hooks()
ã¡ãœãããªã©ã®æ¬ èœããŠããé åããããŸãã ããããè¿œå ããããšã«èå³ããããŸããïŒ
ããã«ã¡ã¯@stevehipwell ã
ãã£ãŒãããã¯ããå¯ãããã ãããããšãããããŸãã ãããŠããããç§ã®çãã§ãïŒ
ãã ããææªã®ã·ããªãªã«ã¯ãæçµçã«å€ããªãå®çŸ©ãã¡ã€ã«ãå«ãŸããŠããŸã...
å®çŸ©ããããžã§ã¯ãã®ãªãªãŒã¹ãšåæããŠããããšã確èªããã«ã¯ããã§ã¶ãŒããŒã ããã®éææ§ãé«ããå¿ èŠããããŸã
ã¯ããåæã®åé¡ã¯å®éã®åé¡ã§ããããã¹ãã§ä¿®æ£ã§ããŸãã
ç§ã¯typescriptã§ãã¹ããè¡ãããšãææ¡ããŸãïŒïŒ508
ãã®è§£æ±ºçã«ã€ããŠåæãããã©ããã«ããããããããã§æèŠãè¿°ã¹ãŠãã ããã
ãã¡ãããç Žå£çãªå€æŽãå ããããšãªããfeathersjsãã¿ã€ãã¹ã¯ãªããã«é©ãããã®ã«ããããšã«æ¬åœã«æ欲çã§ãã
hooks()
ã¡ãœãããªã©ãããã¹ãããšã¯ãŸã ãããããããŸããããããäžç·ã«æ§ç¯ã§ããããã«ãªããŸããã
ãã°ãèŠã€ããããå®çŸ©ãèŠéãããããå Žåã¯ãåé¡ãäœæããŠãã ããã
@AbraaoAlveså®çŸ©ãææ°ã®ç¶æ ã«ä¿ã¡ãããšããé¡æãããããã§ãããåãã§ãæäŒããããŠããã ããŸãã ããŒãžãªã¯ãšã¹ããå®äºããããäžè¶³ããŠããå®çŸ©ã®ã¡ã€ã³ãªããžããªã§ãã°ãçºçãããããšæããŸããïŒ
@stevehipwellã¯ããããããã€ã³ãã§ãã
ãªãªãŒã¹ã¹ã±ãžã¥ãŒã«ã®åé¡ã¯äœã§ããïŒãããæ¹åããããã«äœãã§ããã§ããããïŒ ããã§ã®ãã€ã«ã¹ããŒã³ã¯ããŸã 倧ãŸãã«ç§ãã¡ãèšç»ããŠãããã®ã§ãã
ãããã®æ©èœãçéžããããå®çŸ©ãæŽæ°ããããã»ã¹ã¯ã©ãããã¹ãã§ããïŒ
Typescriptã®å®çŸ©ã¯ãC ++ã®.hïŒããããŒïŒã«äŒŒãŠããŸãã ã¢ãžã¥ãŒã«ã«å¿çããªãããããŒãããå Žåãããã¥ã¡ã³ãã䜿çšãããŠããã³ãŒãã®ããŒãžã§ã³ãšäžèŽããªããªã©ãå®è¡æã«åé¡ãçºçããå¯èœæ§ããããŸãã
ãããã£ãŠãAPIã®å€æŽãå¿ èŠãªåãã€ã«ã¹ããŒã³ã«å®çŸ©ãå«ããå¿ èŠããããšæããŸããããšãã°ãã¡ãœãããä»ã®ãªããžããªã«ç§»åããããã¡ãœããã«æ°ãããã©ã¡ãŒã¿ãè¿œå ãããããŸãâŠ
ãã§ã¶ãŒèªèšŒã®å®çŸ©ãå€æŽããç¹å®ã®ãããžã§ã¯ããžã®ããã¯ãåé€ããŠv1ã«åãããŸãã
ããã§ã®åé¡ã¯ããã®çŸåšã®ããŒãžã§ã³ã®FeathersJSã«å®çŸ©ãå«ããå¿
èŠããããã©ããã§ãã
@AbraaoAlvesããæããŸãã ç§ã¯ããªãã®ãã¹ãŠã®PRã®ãã€ããŒãªãªãŒã¹ãäœæããããšãã§ããããããç¹°ãè¿ãããšãã§ããŸãã ç§ããŸã çåã«æã£ãŠããã®ã¯ïŒ508ã ãã§ãããããã«ã€ããŠã³ã¡ã³ãããŸãã
äžèšã®å ¥åã§2ã€ã®åé¡ã«çŽé¢ããŠããŸãã
socketioã¯åäœããããããŸããã
node_modules/feathers-socketio/index"' resolves to a non-module entity and cannot be imported using this construct.
ãŸããfeathers-cliã¯åŒæ°ãªãã§åºåããŸãããæ®ãã«ã¯ãã³ãã©ãŒãå¿ èŠã§ãã
.configureïŒrestïŒïŒïŒ//ããã§ã®ãšã©ãŒdeclare function restïŒhandlerïŒFunctionïŒïŒFunction;
.configureïŒsocketioïŒïŒïŒ
ããŒã-v
v6.6.0
npm -v
3.10.5
tsc -v
2.1.6
ããããšã³ããªãã€ã³ãã§ãããããã¢ãžã¥ãŒã«ãšããŠãfeathersïŒïŒãã䜿çšããæ¹æ³ã瀺ãããšãèå³æ·±ãã§ãããã
çæãããä»ã®ãã¹ãŠã®ãµãŒãã¹/ããã«ãŠã§ã¢ãå€æã§ããŸãããã³ã³ã¹ãã©ã¯ã¿ãŒïŒïŒ{}ã«feathersïŒïŒãã«ãã»ã«åããããè¯ãæ¹æ³ãå¿
èŠã§ãã ïŒç§ã¯çŸœæ¯ã«äžæ
£ãã§ããç§ããããééã£ãŠãããããããŸãã...ïŒ
ããããªãªãŒã¹ãšããŠå®çŸ©ãåºãããšã¯ã§ããŸããïŒ ãã®ã¬ãã«ã®å€æŽã¯ãããããªãªãŒã¹ã«å®å šã«é©åããŸãã é倧ãªå€æŽãæ°æ©èœã¯ãããŸããã éšåçãŸãã¯èª€ã£ãå ¥åã§ããå ¥åããªãããã¯ãŸãã§ãã
ãªãªãŒã¹ãã§ããããæ¡åŒµã䜿çšããŠã¿ã€ãã³ã°ãæ¹åã§ããäœæ¥ã®éå§ç¹ããããŸãã
ãããåæ»ãç¶ããç§ã®å®çŸ©ã®ããã«DefinitelyTypedã«ãŒãããã©ãå¿ èŠãããå Žåã ç§ã¯ãããè¡ãå¿ èŠã¯ãªãããªããžããªã®å®çŸ©ãåãã§ãæäŒãããŸãã
ïŒ508ã§@AbraaoAlvesã«è³ªåããããŸãããããŸã è¿ä¿¡ããããŸããã ãªãªãŒã¹ãäœæããå Žåãçºçããå¯èœæ§ã®ããåé¡ã«è¿ éã«å¯ŸåŠã§ãã人ãå¿ èŠã§ãïŒç¹ã«ãææªã®å ŽåãTypeScriptã䜿çšããŠããæ¢åã®ã¢ããªãç Žæããå¯èœæ§ãããããïŒã Slackã§èª¿æŽããŠããªãªãŒã¹ãäœæããã³æ€èšŒã§ããŸããïŒminor.preããéå§ã§ããŸãïŒïŒ
çµç±ã§åã¢ãžã¥ãŒã«ã®ãã€ããŒããŒãžã§ã³ã§ãªãªãŒã¹
ãŸã第äžã«ããã®è°è«ã«åå ãããã¹ãŠã®äººãç¹ã«è²¢ç®ãã人ã«æè¬ããŸãã å€ãã®Feathersãªããžããªã®TypeScriptå®çŸ©ã䜿çšããŠãã€ããŒããŒãžã§ã³ããªãªãŒã¹ããŸããããå€ãã®åé¡ãçºçããŸããããã以å€ã®å Žåã¯ããªãå®å®ããã¢ãžã¥ãŒã«ã®äºå®å€ã®ãªãªãŒã¹ã§ããããããŠãŒã¶ãŒã¯TypeScriptããŸã£ãã䜿çšããªãããã«æŽæ°ãããŸããããŒã ïŒèª°ãTypeScriptã䜿çšããªãïŒã確å®ã«ä¿®æ£ããŸãã
Feathers + TypeScriptã®è°è«å šäœããã®ç§ã®äž»ãªãã€ã³ãã¯ãæ¢åã®JavaScriptãããžã§ã¯ãã®åä»ããäœæããã³ç¶æããã®ãéåžžã«é£ããããã«æãããããšã§ãïŒçžäºéçšæ§ã®TypeScriptã®äž»åŒµã«ã€ããŠã¯ããŸããã話ããŸããã§ããïŒã ã³ã¢ããŒã ã¯TypeScriptã䜿çšããŠããªããããAPIã®é倧ãªå€æŽããªãªãŒã¹ããéã«åé²ããå¯äžã®éžæè¢ã¯ãå€ãTypeScriptå®çŸ©ãåé€ããããšã§ãã
DefinitelyTypedãªããžããªã«Feathersã¢ãžã¥ãŒã«ã®ææ°ã®TypeScriptå®çŸ©ããããš
TypeScriptã®çžäºéçšæ§ã®äž»åŒµã«ã€ããŠã¯ããŸããã話ããªãã£ãç§ã«ã¯
Feathersã¯ãç¹å®ã®åæå®ãªãã§å®å
šã«äœ¿çšã§ããŸããããã¯ãã€ã³ããªã»ã³ã¹ãšåãªãã®åçŽãªJSã§ãã ç¹ã«ãããã¯ã¹ã€ã³ãå€çšããfeathersã®ãã©ã°ã€ã³ã·ã¹ãã ã§ã¯ãã¿ã€ãã³ã°ã®äœæãå°é£ã«ãªããŸããããã¯ãã¿ã€ãã¹ã¯ãªããã§ã¯ãªãæ¹æ³ã§ããããã§ãã ç§ã¯éåžžã®typescriptãŠãŒã¶ãŒïŒããã³ãã®ãã¡ã³ïŒã§ãããä»ã®ãšãããµãŒããŒãµã€ãã®ãã§ã¶ãŒã䜿çšããããã«ES6ã«æ»ããŸããã
ã³ã¢ããŒã ã®èª°ãå®éã«typescriptã䜿çšããŠããªãã®ã§ãããã§ã¯åãåå¥ã«ç¶æããæ¹ãé©ããŠããããã§ãã
TypeScriptã§ããŸãæ©èœããå Žåããã§ã¶ãŒã¯Angularã®ãµãŒããŒåŽãã¬ãŒã ã¯ãŒã¯ãšããŠæšå¥šãããŸãã èšã£ãŠãã ã' ïŒ-ïŒã ãšããããå ã«é²ã¿ãŸãã
@ j2L4eãã©ã°ã€ã³ã«ãã£ãŠçŸåšæ··åãããŠããã»ãšãã©ã®ãã®ãã³ã¢ã®äžéšã«ãªããšãããã¯æ¬¡ã®ãªãªãŒã¹ã§ããç°¡åã«ãªããšæããŸãã ããããããã§ç¢ºå®ã«å©ããåŸããšããäžè¬çãªåé¡ã解決ãããã©ããã¯ããããŸããã
@rjsteinertçŸæç¹ã§ååšãããã®ã¯ã»ãšãã©æ©èœããã¯ãã§ãããããã§ããä»ã®ãªãŒãã³ãœãŒã¹ãããžã§ã¯ããšåæ§ã«ãè©ŠããŠæ¯æŽããããå ã«é²ãæ©äŒããããŸãã
è©ŠããŠæäŒãããå ã«é²ããã£ã³ã¹ããããŸãã
ç§ã¯Angularã®é·å¹Žã®JSããã°ã©ããŒã«äžæ £ããªäººã®äžäººã§ãããTSãã©ãã»ã©äººçã壮倧ã«ããããç解ãããµãŒããŒåŽã§TSã䜿çšããªããšãããŒã ã¯ãããåªããæžãçŽãããšããŠããããšã«æ°ã¥ããŸãã次ã®æ°å¹Žéã¯æ¯æ¥ãããã ãªãã·ã§ã³ãäžè¶³ããŠãããããçµå±ã®ãšãããã§ã¶ãŒã䜿çšããå¯èœæ§ããããŸãããã®å Žåã¯ãã¿ã€ãã³ã°ãææ°ã®ç¶æ ã«ä¿ã€ã®ã«ééããªã圹ç«ã¡ãŸãã ç§ãã¡ãéãããã£ãŠããAPIã®é倧ãªå€æŽããªãªãŒã¹ãããšãã«åé²ããå¯äžã®éžæè¢ã¯ãå€ãTypeScriptå®çŸ©ãåé€ããããšã§ãããšèšã£ãŠããã ãã§ãããä»ã®å Žæãæ¢ããŸãã ã¡ãã£ãšèããªãã§ãã ãããæ¢åã®ãããžã§ã¯ãããµããŒãããå¿ èŠãããããšã¯ç解ããŠããŸããç§ãã¡ãæžãçŽããããŠããç¶æ³ã§ã¯ããã¹ãŠã®äººã幞éã§ã¯ãããŸããïŒéåœã«ãããããããŸããïŒã
@rjsteinert TypeScriptã¯ãããªãã«ãšã£ãŠéåžžã«äŸ¡å€ã®ãããã®ãšããŠäœãæäŸããŸããïŒ ïŒæ£çŽãªè³ªåïŒç§ã®çŸåšã®äžé£ã®Feathersã®äœæ¥ãå®äºããåŸãç§ã®å¥œå¥å¿ã¯ãTypeScriptãèŠãã®ã«ååãªèå³ããããããŸãã ãªãŒãã³ã³ããªãŒã/ CodeSenseã«åœ¹ç«ã€ããšã¯ç¥ã£ãŠããŸãããFeathers APIã¯éåžžã«å°ããã®ã§ãããã»ã©äŸ¿å©ã ãšã¯æããŸããã ç§ã®ç¡ç¥ãèš±ããŠãã ããã ;ïŒ
autocomplete/CodeSense
ã¯çŽ æŽãããå¯ç£ç©ã§ãããç§ã¯éåžžVimã«ããã®ã§ãã°ããºãå
¥æã§ããŸããã ç§ããããŸã§ã«èŠã倧ããªå€åã¯ãæäŸãããé¢æ°ããªããžã§ã¯ãã®äœ¿çšæ¹æ³ãæ確ã«ããæ¹æ³ãæšæºåããããšã§ãã NPMã®ã©ã€ãã©ãªã調ã¹ãŠã¿ããšãåçåä»ããããèšèªã§ã¯ããããªãããšãæ確ã§äœ¿ããããããããã«ãç¬èªã®ç¬åµçãªãœãªã¥ãŒã·ã§ã³ã䜿çšããŠããã©ã€ãã©ãªããããããããŸãã TSã¯ãã³ãŒããæžããŠãããšãã«èªåã§ãã§ãã¯ããã¿ã€ãã®ãã€ã©ãŒãã¬ãŒãã倧éã«ç¯çŽããä»ã®äººã®ã³ãŒãã®äœ¿çšæ¹æ³ããã°ããç解ããããããŸãã æè¿ã¯èªåã®ã¹ã¿ã€ã«ã®ãã€ã©ãŒãã¬ãŒãJSãæžãã®ã«ããããããŠãããšæãåŸåããããå€éšã©ã€ãã©ãªã䜿çšãããã³ã«èª°ãã®READMEãèªã¿ãããããŸããã
ç§ã¯@rjsteinertã«åæã
ãã®GitHubã®æçš¿ã«æžã蟌ã¿ãFeatherJSã䜿çšããŠããå Žåã¯ãããããç±å¿ãªJavaScriptéçºè
ã§ãã ããªããFeatherJSéçºè
ã®äžäººã§ããã°ãTypeScriptãèªåã§äœ¿çšããŠãæå³ããããŸããã ç¹å¥ãªããŒã«ãTypeScriptã®ãã«ãã¯å¿
èŠãããŸããã ããªãã¯JavaScriptã®ãŠãã³ãŒã³ã§ãã
ç§ã¯TypeScriptã«éåžžã«å察ããŠããŸããïŒç¹ã«ããŒãžã§ã³Alpha 1.1ã§äœ¿çšããããšãäœåãªããããŸããïŒããé·å¹Žã«ããã£ãŠãTypeScriptãé«ãè©äŸ¡ããããšãåŠã³ãTypeScriptãªãã§ã¯çããŠãããŸããã äžç·ã«ä»äºãããååã¯ãJavaScriptã®ç¥èã»ã©ç¥èããããŸããã 圌ãã¯ãã¹ãŠã®ç°ãªãèæ¯ããæ¥ãŠãããJavaScriptãããã«ãã ããªããã®ã§ãããã眵åããŸãã
ãã以æ¥ãTypeScriptèšèªã¯ã³ãã¥ããã£ã®ãã£ãŒãããã¯ãã倧ããæé·ããŸããã
ããŒã«ãšå€§ããªããŒã ããªããã°ã倧èŠæš¡ãªWebãµã€ããæ§ç¯ããããšã¯ã§ããŸããã @rjsteinertãèšãããã«ãããŒã ã¯ã¯ã©ã€ã¢ã³ãåŽã§TypeScriptã®äœ¿çšãéå§ãããã°ãããããšããµãŒããŒåŽã䜿çšããããšã«éåžžã«äžæºã
ãŠã§ãäžã§äœ¿çšãããŠããæã人æ°ã®ããèšèªãèŠãŠãã ããïŒPHPãNodeJSãRubyãCïŒãJava ...ãããã®ããã€ãã¯åä»ããããŠããŸãããããã§ãªããã®ããããŸãã ç§ã¯ããããã¹ãŠã®èšèªã§äœæ¥ããŸããããããããã¹ãŠã®å¹ŽæãçµãŠããå®è¡æã®ã¿ã®ãšã©ãŒã®æ€åºãèšèªã«æ»ããããªããšèšããŸãã ãããã¯ãã¹ãŠãé åãé·æãçæããããŸãã 倧èŠæš¡ãªããŒã ã§ã¯ãç§ã¯åžžã«å°ã匷ããŠã¿ã€ãããããã®ã䜿ãããšãææ¡ããŸãã
ç§ãæžããPHPSDKã䜿çšããŠãã人ã®ææ°ã®äŸã 100æ¡ã®ã倧ããªæ°ããåãå
¥ããã¡ãœãããããå Žåãå®éã«ã¯æååãšããŠæ±ããŸãã åå¿è
ã®éçºè
ã¯ã setValue(123456789123...)
åŒã³åºããæ©èœããªãçç±ãå°ãããã°ãéããŸãããNodeJSãŸãã¯substr
ã¡ãœããã§ã¯ããªãäœãã¯ã©ãã·ã¥ããããã§ãã ããã§ãäžééçºè
ã¯ããã¥ã¡ã³ãããã§ãã¯ããŠããããæååã§ããå¿
èŠãããããšã確èªããŸãã ã¿ã€ãã³ã°ãæ³åããŠã¿ãŠãã ãããã¿ã€ãã³ã°ãŸãã¯ã³ã³ãã€ã«æã«æååã匷å¶çã«å
¥åããŸãã ããããã°ãéçºè
ã¯ç¹å®ã®ããã¥ã¡ã³ããèªãå¿
èŠãããã°ãéãå¿
èŠããããŸããã
æ°ããAngular2 + NodeJSãããžã§ã¯ãã«äœ¿çšãããã¬ãŒã ã¯ãŒã¯ã«ã€ããŠå°ã調ã¹ããšãããFeatherJSããŸãã«å¿ èŠãªãã®ã®ããã§ããã ãã ããä»æ¥å¥ã®ãµãŒããŒãããžã§ã¯ããåºãŠããTypeScriptãããã«ãµããŒãããŸãããšèšã£ãå Žåã¯ãããã«åãæ¿ããŸãã
ãã®åé¡ã«é¢ããçããã®ãæèŠã«æè¬ããŸãã éåžžã«è¯ãè°è«ãããã€ããããŸããããããã¯ã¿ã€ãã¹ã¯ãªããã®ã¡ãªããã«åãããå§ããŠãããšæããŠããŸããããã¯å®éã«ã¯ãã®åé¡ã®ç®çã§ã¯ãããŸããã ã³ã¢ããŒã ã¯è©±ãåããŸããããTypescriptå®çŸ©ã¯ãã§ã¶ãŒã®æäœã«äžå¯æ¬ ã§ã¯ãªãããã§ã¶ãŒã®ã³ã¢ãé²åãããé床ãäœäžãããããããµããŒãããŸããã ãªãªãŒã¹æã«æŽæ°ãããã®ã¯ãã§ã«ãããããããŸãã ãªãªãŒã¹ãããæ©ããªãªãŒã¹ããããã«äŸåé¢ä¿ãæžãããããšããŠããŸãããTypescriptå®çŸ©ãè¿œå ãããšäœæ¥ãå¢ããŸãã Feathersã³ã¢ããŒã ã®èª°ãTypescriptã䜿çšããŠããªãã®ã§ã次ã®ããã«ããŸãã
å ¬åŒã®å®çŸ©ãäœæ/ç¶æãããå Žåã¯ãæ°ããããã¥ã¡ã³ãã®ãšã³ã·ã¹ãã ã»ã¯ã·ã§ã³ã§ãããã«ãªã³ã¯ã§ããŸãããèªåã§äœ¿çšããªãã§ãã ããããã§ã¶ãŒã䜿çšããå Žåã¯TSå®çŸ©ã¯äžèŠã§ãããå人çãªå¥œã¿ã§ããããããç¶æããã€ããã¯ãããŸããã ããããæ¢åã®ãªããžããªãããã«ãã @ dafflã¯ããããhttps://github.com/feathersjs/feathers-typescriptã«é 眮ã@jsgoupilã@rjsteinertã@AbraaoAlvesãŸãã¯ä»ã®èª°èå³ãã¬ããç¶æãããå Žåãæã ã¯ãã¢ã¯ã»ã¹æš©ãä»äžããã³/ãŸãã¯ã¬ãã転éãããŠããã ããŸãã ããã«ãããå®çŸ©ãææ°ã®ç¶æ ã«ä¿ã¡ãDefinitelyTypedã«éä¿¡ãããããªããšæããŸãïŒç¢ºãã«ããã®ããã»ã¹ã«ã€ããŠã¯ããããããŸããïŒã
ãã®åé¡ã¯è°è«ã®ããã«éãããŸãŸã«ããŠãããŸãããã³ã¢ãªããžããªã®å€éšã§å®çŸ©ãå®è£ ããããã«å¿ èŠãªããšãšã¯å¯Ÿç §çã«ãTypescriptã®ã¡ãªããã«ã€ããŠè°è«ãç¶ããå Žåã¯ãã¹ã¬ãããããã¯ããŸãã ð
ããªãã¯ãããå«ããããªãå Žåã¯ãNPMã«å
¬éãããèšå®ãããããŒãžã§ã³ã®ãœãŒã¹ãã£ã¬ã¯ããªãå«ããŠãã ããå¯èœæ§ãjsnext:main
ãŸãã¯module
ã§package.json
ãšã³ããªã«
TypeScriptã¯ã¯ã€ã«ãã«ãŒãã¢ãžã¥ãŒã«å®çŸ©ããµããŒãããããã«ãªã£ããããfeathers-sub-modulesãããã¹ãŠã®åãåé€ãããããfeathers
å«ããã®ã¯ç°¡åãªåé¿çã§ãã
declare module 'feathers';
declare module 'feathers-*';
ããã¯ããã§ã¶ãŒãšãã¹ãŠã®ãã§ã¶ãŒã宣èšããŸããã©ã®ã¢ãžã¥ãŒã«ãã¿ã€ãany
ãšããŠå®£èšããŸããããã«ãããTSãããã«äœ¿çšã§ããããã«ãªããŸãã 匷åãããã€ã³ããªã»ã³ã¹ã¯åŸãããŸããããæ¢åã®ãããžã§ã¯ãã®å
容ãå£ãããšãªãæ©èœããåé¡ã解決ããŸãã
ç§ãããŸãïŒ
"paths": {
"feathers-socketio": ["typedefs/feathers-socketio/index.d.ts"]
å€æ°ã®å°ããªPRãéããŠãTS以å€ã®ãŠãŒã¶ãŒã«å¯ŸããŠå®éã«ã¯äœãããããé©çšããªããããããŒãžã§ã³ãå€æ°äœæããã®ã§ã¯ãªããåœé¢ã®éã誀ã£ããŸãã¯äžå®å šãªtypedefãããªãŒããŒã©ã€ããããŸãã
ããã«ã¡ã¯ã
ã¿ã€ãã¹ã¯ãªããã®ãµããŒãã«é¢ããçåã1ã€æ確ã«ããŠãããããšæããŸãã
ãµãŒãã¹ã®çŸåšã®ã¿ã€ãå®çŸ©ã«ãããšããã¹ãŠã®ãµãŒãã¹ã¡ãœããã¯å¿
é ã¡ãœããã§ãã
ããããããã¥ã¡ã³ãã«ãããšããµãŒãã¹ã¡ãœããã¯ãªãã·ã§ã³ã§ãã
èŠã
ã§ãããããµãŒãã¹ã®å®çŸ©ã¯ä»¥äžã®ããã«ãªããŸããã
interface Service<T> extends events.EventEmitter {
find?(params?: Params, callback?: any): Promise<T[] | Pagination<T>>;
get?(id: number | string, params?: Params, callback?: any): Promise<T>;
create?(data: T | T[], params?: Params, callback?: any): Promise<T | T[]>;
update?(id: NullableId, data: T, params?: Params, callback?: any): Promise<T>;
patch?(id: NullableId, data: any, params?: Params, callback?: any): Promise<T>;
remove?(id: NullableId, params?: Params, callback?: any): Promise<T>;
setup?(app?: Application, path?: string): void;
}
@ harish2704ã¯ãããã§ã
ç§ã¯ä»ã®ãšããããªãŒããŒã©ã€ãã¬ãtypedefãã®åé¿çã«åºå·ããŠããããããžã§ã¯ããå®äºãããããã€ãïŒæã亀差ãããŠïŒfeathers-typescriptãŸãã¯DefinitelyTypedã§å ¬éãããããããŸããã
ããã«ãããå°ãªããšã1ã€ã®æ¬çªãããžã§ã¯ãã§æŠéãã¹ãæžã¿ã®å®çŸ©ãæåºããããšãã§ããŸãã
ããããšãã¯ãŒïŒ
2017幎5æ9æ¥ç«ææ¥åå7æ42åããªãã£ãŒããã€ã±ã«ã¯ãŒ<
[email protected]>ã¯æ¬¡ã®ããã«æžããŠããŸãïŒ
@ harish2704https ïŒ//github.com/harish2704ã¯ãããã§ã
ç§ã¯ä»ã®ãšããããªãŒããŒã©ã€ãã¬ãtypedefãã®åé¿çã«åºå·ããŠããŸãããããŠ
å€åãã€ãïŒåœŒã®æã亀差ããïŒçŸœã«å ¬éãã-typescriptãŸãã¯
ãããžã§ã¯ããå®äºããããDefinitelyTypedãããã¯ç§ãã§ããã€ãã®æŠéãã¹ããããå®çŸ©ãæåºããããšã確å®ã«ããŸã
å°ãªããšã1ã€ã®çç£ãããžã§ã¯ããâ
ãã®ã¹ã¬ããã«ãµãã¹ã¯ã©ã€ãããŠããããããããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/feathersjs/feathers/issues/381#issuecomment-300138396 ã
ãŸãã¯ã¹ã¬ããããã¥ãŒãããŸã
https://github.com/notifications/unsubscribe-auth/ABezn0WGqH30NNp8-X-ckpVuk_BTQbbnks5r4FEQgaJpZM4Jears
ã
@myknbani
ãã§ãã¯ã€ã³ããã®ã¯å°ãæ©ããããããŸããããtypedefãã©ã®ããã«å©çšããŸãããïŒ æãå¿
èŠã§ããïŒ :)ç§ã¯æ°ãããããžã§ã¯ãã§ãã§ã¶ãŒã䜿çšããããšæã£ãŠããŸãããTypeScriptã®ãµããŒãããªãããšã¯å°ãåä»ãªç¹ã§ãã
TypeScriptãµããŒãã®æ¬ åŠ
æ£ç¢ºã«äœãæå³ããã®ãããããªãã ããã¯å®å šã«æ©èœããŸãã å®ç§ã«ã¯ã»ã©é ãã§ãããæ©èœããŸãã
@jonlambert @ ããã§èª¬æããããªãã¯ãå®è¡ããŸãã
IMHOãçŽ2è¡ã§ã®ã¿äœ¿çšããå¿
èŠãããfeathers-rest
ãããªããã±ãŒãžã¯ãå
¥åãã䟡å€ããŸã£ãããããŸãã:-)
äœãå€ããã®ãããæãåºããŸããããããã¯ããµãŒãã¹ã¯åé¡ãªããšæããŸãã
@ j2L4e feathers
ã¯TypeScriptããµããŒãããŠããªããšããæå³
TypeScriptã¯ãã¢ããªãå°æ¥çã«ä¿å®å¯èœã§ããããšãä¿èšŒããã¯ãŒã¯ãããŒã«äžå¯æ¬ ã§ããããã
ãã®åé¿çããªããŠãæ©èœããŸãã å ¬åŒãªããžããªã«ã¯ãããŸããããå¿ èŠã®ãªãã¿ã€ãã³ã°ããããŸãã äžå¿«æã¯ãããŸããããããŸããã£ããšããŠãè©ŠããŠããªãããã§ãã
Feathersã³ã¢ããŒã ã®èª°ãTypescriptã䜿çšããŠããªãã®ã§ã次ã®ããã«ããŸãã
- å®çŸ©ãé©åã«ç¶æããããã®ååãªç¥èããªã
- ãŠãŒã¶ãŒããŒã¹ã®ããäžéšãå®çŸ©ããå¿ èŠãšãããå Žåãå®çŸ©ã®äœæ¥ã«æéãè²»ããããšã¯ã§ããŸããã ããå€ãã®äººã ã«åœ±é¿ãäžããããã«åãçµãã¹ãä»ã®å€ãã®é ç®ããããŸãã
ãã¬ãŒã ã¯ãŒã¯ã®æ°åè ãšããŠãç§ã¯ãã®åé¡ã®ååšãèããŠããã§ããããããã«ãäžèšã®ã³ã¡ã³ãã¯ãTSãµããŒãã®æ¬ åŠãæ³å®ããã®ã«ååã§ããã ãããééã£ãçµè«ã§ããå Žåã¯ç³ãèš³ãããŸããããç§ã¯ãããè©ŠããŠã¿ãŸãã
ãŸãããæ©èœãããå¯èœæ§ããããŸãããåå®çŸ©ãAPIã§ææ°ã®ç¶æ ã«ä¿ãããããšãä¿èšŒãã圢åŒããªããã°ãå°æ¥çã«åé¡ãåŒãèµ·ããå¯èœæ§ãããããã§ãã
ããªããæ£ããã
ãã ããæè¿ã¯ããªãã®æ°ã®æ©èœåŒ·åãè¡ãããã¿ã€ãã³ã°ã®å®äºãèšç»ãããŠãããäœæäžã§ãã
ããã¯çŽ æŽããããã¥ãŒã¹ã§ãðãããŸã§ã®ãšãããã¬ãŒã ã¯ãŒã¯ã§ã®äœæ¥ãæ¬åœã«æ¥œããã§ãããTSã§äœ¿çšã§ããããšã«è奮ããŠããŸãð
ãã®åé¿çããªããŠãæ©èœããŸãã å ¬åŒãªããžããªã«ã¯ãããŸããããå¿ èŠã®ãªãã¿ã€ãã³ã°ããããŸãã äžå¿«æã¯ãããŸããããããŸããã£ããšããŠãè©ŠããŠããªãããã§ãã
@ j2L4eãã®éãã§ãã typedefã¯ä»ã§ã¯ã¯ããã«è¯ãç¶æ
ã«ãªã£ãŠãããšæããŸãã ãã¹ãŠã®ããªãŒããŒã©ã€ãããåé€ããŸãããããããŸã§ã«æ®ã£ãŠããåé¡ã¯ã app.service(...)
ã䜿çšããå Žåã®!
ã¢ãµãŒã·ã§ã³ïŒ strictNullChecks
cozïŒã ãã§ãã
ãµãŒãã¹å®çŸ©ïŒãµãŒãã¹ã¡ãœããããã¹ãŠãªãã·ã§ã³ã§ããå ŽåïŒãšãµãŒãã¹ã€ã³ã¹ã¿ã³ã¹ïŒãã¹ãŠã®ãµãŒãã¹ã¡ãœãããæªå®çŸ©ã§ã¯ãªãå ŽåïŒã®åãåããããšããå§ãããŸãã çŸåšã !
ã©ãã«ã§ãè¿œå ããå¿
èŠããããŸããïŒäŸïŒ await app.service('api/foos').create!([{
ç§ã¯åé¿çã§ãããæã£ãŠããŸããïŒ
interface ServiceDefinition<T> {
find?(params?: Params, callback?: any): Promise<T[] | Pagination<T>>;
get?(id: number | string, params?: Params, callback?: any): Promise<T>;
create?(data: T | T[], params?: Params, callback?: any): Promise<T | T[]>;
update?(id: NullableId, data: T, params?: Params, callback?: any): Promise<T>;
patch?(id: NullableId, data: any, params?: Params, callback?: any): Promise<T>;
remove?(id: NullableId, params?: Params, callback?: any): Promise<T>;
setup?(app?: Application, path?: string): void;
}
interface ServiceInstance<T> extends events.EventEmitter {
find(params?: Params, callback?: any): Promise<T[] | Pagination<T>>;
get(id: number | string, params?: Params, callback?: any): Promise<T>;
create(data: T | T[], params?: Params, callback?: any): Promise<T | T[]>;
update(id: NullableId, data: T, params?: Params, callback?: any): Promise<T>;
patch(id: NullableId, data: any, params?: Params, callback?: any): Promise<T>;
remove(id: NullableId, params?: Params, callback?: any): Promise<T>;
}
ããã¯ã©ãã§ããïŒ
interface GetMethod<T>{
/**
* Retrieves a list of all resources from the service.
* Provider parameters will be passed as params.query
*/
find(params?: Params, callback?: any): Promise<T[] | Pagination<T>>;
}
interface FindMethod<T>{
/**
* Retrieves a single resource with the given id from the service.
*/
get(id: number | string, params?: Params, callback?: any): Promise<T>;
}
interface CreateMethod<T>{
/**
* Creates a new resource with data.
*/
create(data: T[], params?: Params, callback?: any): Promise<T[]>;
create(data: T, params?: Params, callback?: any): Promise<T>;
}
interface UpdateMethod<T>{
/**
* Replaces the resource identified by id with data.
* Update multiples resources with id equal `null`
*/
update(id: NullableId, data: T, params?: Params, callback?: any): Promise<T>;
}
interface PatchMethod<T>{
/**
* Merges the existing data of the resource identified by id with the new data.
* Implement patch additionally to update if you want to separate between partial and full updates and support the PATCH HTTP method.
* Patch multiples resources with id equal `null`
*/
patch(id: NullableId, data: any, params?: Params, callback?: any): Promise<T>;
}
interface RemoveMethod<T>{
/**
* Removes the resource with id.
* Delete multiple resources with id equal `null`
*/
remove(id: NullableId, params?: Params, callback?: any): Promise<T>;
}
interface OptionalMethods <T> {
find?(params?: Params, callback?: any): Promise<T[] | Pagination<T>>;
get?(id: number | string, params?: Params, callback?: any): Promise<T>;
create?(data: T[], params?: Params, callback?: any): Promise<T[]>;
create?(data: T, params?: Params, callback?: any): Promise<T>;
update?(id: NullableId, data: T, params?: Params, callback?: any): Promise<T>;
patch?(id: NullableId, data: any, params?: Params, callback?: any): Promise<T>;
remove?(id: NullableId, params?: Params, callback?: any): Promise<T>;
}
type GetService<T> = GetMethod<T> & ServiceAddons;
type FindService<T> = FindMethod<T> & ServiceAddons;
type CreateService<T> = CreateMethod<T> & ServiceAddons;
type UpdateService<T> = UpdateMethod<T> & ServiceAddons;
type PatchService<T> = PatchMethod<T> & ServiceAddons;
type RemoveService<T> = RemoveMethod<T> & ServiceAddons;
interface ServiceCore<T> extends OptionalMethods<T> {
setup?(app?: Application<any>, path?: string): void;
}
interface ServiceAddons extends events.EventEmitter {
filter(any?: any): this;
}
type Service<T> = OptionalMethods<T> & ServiceAddons;
ããã«ãããæ°ããã¿ã€ããäœæããããšã§ãTS以å€ã®ãµãŒãã¹ãå ¥åã§ããŸããããšãã°ãfeathers-mailerã®å ŽåïŒ
type MailerService = CreateService<Mail>;
ãŸãã¯ãäœæãšåé€ã®ã¿ãå¯èœãªïŒãŸã£ãã圹ã«ç«ããªãïŒãµãŒãã¹ïŒ
type TrashyService<T> = CreateService<T> & RemoveService<T>;
ããã¯ãã¹ãŠãã»ã¬ã¯ã¿ãŒé¢æ°ã䜿çšããŠãµãŒãã¹ã念é ã«çœ®ããŠïŒããšãã°ãapp.serviceïŒs => s.mailoutïŒïŒãé©åãªã¿ã€ãã§ãã®ãµãŒãã¹ãè¿ããŸãã ããã«èŠãããããã«ïŒ
ããäžåºŠãã§ãã¯ã€ã³ããã ãã§ãã©ããã£ãŠä¹ããŸããïŒ @ j2L4e post ^æ¬åœã«ãããã«èŠããŸãïŒ ç§ãäœãå©ãã«ãªããã©ããã確èªããããã«ä»ã«äœãããå¿ èŠãããã®ãââçåã«æã£ãŠããŸãã
OKããããŸã§ã«èŠããšã©ãŒïŒ
import * as handler from 'feathers-errors/handler';
import * as notFound from 'feathers-errors/not-found'; //[1]
app.use(notFound()); //[2]
app.use(handler()); //[3]
[1]
[ts]ã¢ãžã¥ãŒã« '"cïŒ/ Users / George / Source / Repos / ts4 / node_modules / females-errors / not-found"'ã¯éã¢ãžã¥ãŒã«ãšã³ãã£ãã£ã«è§£æ±ºããããã®æ§æã䜿çšããŠã€ã³ããŒãããããšã¯ã§ããŸããã
[2]
ã¿ã€ã 'Function'ã®åŒæ°ã¯ãã¿ã€ã 'PathParams'ã®ãã©ã¡ãŒã¿ãŒã«å²ãåœãŠãããšãã§ããŸããã
ã¿ã€ã 'Function'ã¯ã¿ã€ã 'ïŒstring | RegExpïŒ[]'ã«å²ãåœãŠãããšãã§ããŸããã
ããããã£ãpushããã¿ã€ããFunctionãã«ãããŸããã
[3]
ã¿ã€ã 'Function'ã®åŒæ°ã¯ãã¿ã€ã 'PathParams'ã®ãã©ã¡ãŒã¿ãŒã«å²ãåœãŠãããšãã§ããŸããã
ã¿ã€ã 'Function'ã¯ã¿ã€ã 'ïŒstring | RegExpïŒ[]'ã«å²ãåœãŠãããšãã§ããŸããã
ïŒãšã€ãªã¢ã¹ïŒnotFoundïŒïŒïŒé¢æ°
æ¢åã®åé¿çã¯ãããŸããïŒ
次ã®ããŒãžã§ã³ã§ã¯ã @ j2L4eã¯
npm i -g lerna
git clone -b buzzard-j2L4e https://github.com/feathersjs-ecosystem/feathers-typescript.git
cd feathers-typescript
lerna bootstrap
lernaã¯ãã¹ãŠã®ããã±ãŒãžãšdepsããªã³ã¯ããŸãã 次ã«ãã/ packages / testsãµããã©ã«ããŒïŒãã¹ãããŸã èŠã€ãããªããããäžçš®ã®éã³å Žã«ããŸããïŒã«ç§»åããŠãTSã®è¯ããè©ŠããŠã¿ãŠãã ããã index.tsããã§ãã¯ããŠãã ããã
ã³ã³ãã€ã«ããŠå®è¡ããã«ã¯ãã/ packages / testsãã
npm start
ãå®è¡ããŸã
Feathers 2ãã3ãžã®ç§»è¡ãéå§ããã°ããã§ãindex.d.tsãã¡ã€ã«ãããã@feathersjsããã±ãŒãžããæ¬ èœããŠããŸãã ãããã埩å ããèšç»ã¯ãããŸããïŒ
äžèšã®1ã€ã®ã³ã¡ã³ãã§è¿°ã¹ãããã«ããããã¯https://github.com/feathersjs-ecosystem/feathers-typescript/tree/buzzard-j2L4eã«ç§»åãããDefinitelyTypedã«éä¿¡ãããŸãã @ j2L4eã¯çŸåšå¿ããããã®ã§ããããæŸãã®ã¯ä»ã®èª°ã次第ã§ãã ç§ãç解ããããšãããããã¯äž»ã«LintingãééãããDefinitelyTypedã«éä¿¡ããããšã§ãã ç§ã¯ãããåãã§æã«å ¥ãã人ãåãã§å©ããŸãããèªåã§ãããåãå ¥ããäºå®ã¯ãããŸããã
ãããããã¯ç§ãäºæ³ããŠãããããã¯ããã«å€ãã®äœæ¥ã§ãããã³ãã¥ããã£ããã®ãã£ãŒãããã¯ã¯äºå®äžãŒãã§ããã æéãèŠã€ãããããã«å®çŸãããŸãã ããããããã»ã©æ©ãã¯ãããŸããã
誰ããããã§ãã£ã€ã ã鳎ãããšããããããã¯æ¬åœã«çŽ æŽãããã§ãããã DTãªã³ãã£ã³ã°ããã¹ãŠã§ããããã¹ãŠãæ£åžžã«æ©èœããŠããããšã¯å¥ãšããŠã
Slackããã®ã¯ã€ãã¯ã³ããŒã¢ã³ãããŒã¹ãïŒ
ã¿ããªãç§ã¯ä»æ¬åœã«å¿ããã®ã§ãã¿ã€ãã³ã°ã¯æåªå äºé ã§ã¯ãããŸããã ãããã¯æ©èœããŸãããDefinitelyTypedã¯ãªã³ãã£ã³ã°ã«ãŒã«ã«é¢ããŠéåžžã«å³æ Œã§ãã ã¿ã€ãã³ã°ãæ確ã«ã¿ã€ãã³ã°ããããªã³ãã£ã³ã°ããã»ã¹ãééããã®ãæäŒã£ãŠããããªããããã¯çŽ æŽãããããšã§ã
ããã§ç§ã®DTãã©ãŒã¯ããã§ãã¯ããŠãã ããhttps://github.com/j2L4e/definitelytyped ãããªãã¯types/feathersjs__packagename
feathersjsããã±ãŒãžãèŠã€ããã§ããã
ã¯ããŒã³ãnpmã€ã³ã¹ããŒã«ããŠãããã±ãŒãžã®1ã€ã«ãªã³ã¿ãŒãå®è¡ããŸãïŒäŸïŒ npm run lint @feathersjs/feathers
ïŒç·šéæžã¿ïŒïŒ
@feathersjs/feathers
ã¯ãã§ã«é©åã«ãªã³ããããŠããã®ã§ãåç
§ãšããŠäœ¿çšã§ããŸãã ïŒç·šéïŒ
TypeScriptå®çŸ©ã¯ã httpsïŒ//github.com/DefinitelyTyped/DefinitelyTyped/pull/22805ã§DefinitelyTypedã«ã¬ãã¥ãŒãè¿œå ãããã®ãåŸ ã£ãŠããŸã
NPMãä»ããŠå®çŸ©ã«ã¢ã¯ã»ã¹ã§ããããã«ãªããŸããïŒ
ã¯ããããã±ãŒãž@feathersjs/package
@types/feathersjs__package
ãã€ã³ã¹ããŒã«ããŠããã£ãŒãããã¯ããå¯ããã ããã
@erikmaãæ¯æŽããããšã
@ j2L4eãç²ãæ§ã§ããïŒ ãããããã¹ãŠã®@featherjs/express
é¢æ°ããšã¯ã¹ããŒãããŠãããããã§ããïŒ typescriptå®çŸ©ãã¡ã€ã«ã«restãjsonãnotFoundãurlencodedã«ã€ããŠã®èšåãèŠã€ãããŸããã
ããªããæ£ããããããã¯æ¬ ããŠããŸãã
ä»ã®ãšãããtypings.d.tsãã¡ã€ã«ã次ã®ããã«è¿œå ããŸãã
import { ErrorRequestHandler, RequestHandler } from 'express';
declare module '@feathersjs/express' {
export function errorHandler(options?: any): ErrorRequestHandler;
export function notFound(): RequestHandler;
export const rest: {
(): () => void;
formatter: RequestHandler;
};
}
urlencodedãã©ãã«è¡ãã¹ããããããªãã
urlencoded
ãšjson
ã¯ãæåŸã®ãã€ããŒããŒãžã§ã³ã®express
ã«è¿œå ãããŸããã express
å
¥åã¯ãŸã æŽæ°ãããŠããŸãããïŒ
ããã¯ãšã¯ã¹ãã¬ã¹ã§ããããããšãfeathersjs / expressã§ããïŒ
Expressããåãšã¯ã¹ããŒããããã°ããã§ãã
ã ããããªãã¯Import { urlencoded, json } from '@feathersjs/express'
ãããããšãã§ããã¯ãã§ããïŒ ãŸãã¯ããšã¯ã¹ããŒããããoriginal
ããååŸããŸããïŒ
require('express')
ãããšã¯ã¹ããŒãããããã®ã¯ãã¹ãŠã @feathersjs/express
ã«ãã£ãŠåãšã¯ã¹ããŒããããŸãïŒ //github.com/feathersjs/express/blob/master/lib/index.js#L82
ãŸããåé¡ã®ãªãå®çŸ©ã§channels.tsãåŠçããæ¹æ³ãç¥ã£ãŠããŸããïŒ
ãããªã«çãæéã§ãã¹ãŠã®åé¡ãæããŠãã¿ãŸããã
@ types / feathersjs__socket-commonsãã€ã³ããŒãããŸã
èŒžå ¥ ïŒ ç解ã§ããªã
ç³ãèš³ãããŸããããå®éã«ã¯ãImport @ femalesjs / socket-commonsããšè¡šç€ºãããŠããã¯ãã§ãã ãã®ã¿ã€ããã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã
@types/feathersjs__feathers
ãã€ã³ã¹ããŒã«ãããšã app.channel
ãæ©èœããŸããã 次ã«@types/feathersjs__socket-commons
è¿œå ãããšã app.on
ãæ©èœããªããªããŸãã
DefinitelyTyped / DefinitelyTypedïŒ23195ãä»ããŠä¿®æ£ãããŸã
ããã§ããã«åé¡ãåãäžããŠãã ããïŒ https ïŒ
TSå®çŸ©ã®åé¡è¿œè·¡ã¯å°ãæ··ä¹±ããŸãã ããªãã¯äººã ãfeathers-typescriptãªããžããªã«èªå°ããŠããŸãããããªãã¯_ "ãã®ãªããžããªã¯çŸåšå»æ¢è¿°ã¹ãŸããã ããããã®ãªããžããªã§å®çŸ©ãç¶æããã代ããã«DTãå©çšããå Žåã¯ãããããPRãçºçããŠããŒãžãããå Žæã§ãããããDTãªããžããªã§ãåé¡ãä¿æããã®ãæãçã«ããªã£ãŠãããšæããŸãã
ããã§è©ŠããŠã¿ãããšã«ããŸããã ç§ã¯ããã€ãã®ãã£ãã«ãéããŠãªã¯ãšã¹ããåãåã£ãŠãããããã«è¡ãããã«äººã ã«æ瀺ããããšã¯ãããäžå åããããã®è¿ éãªæ¹æ³ã§ããã å人çã«ã¯ã1ãæã§ããéãã©ãã«è¡ãã®ãæ°ã«ããªã
feathers.services.dogs
代ããã«feathers.service('dogs')
feathers.services.dogs
䜿çšã§ããªãçç±ã¯ãããŸããïŒ
ã¯ãã feathers.service('dogs')
ã¯defaultService
ïŒã¯ã©ã€ã¢ã³ãã§ãµãŒãã¹ãã€ã³ã¹ã¿ã³ã¹åããïŒãåŒã³åºãããµãŒãã¹åããã¹ã©ãã·ã¥ãåé€ããŸãã
TypeScriptå®çŸ©ã¯DefinitelyTypedã«ãªããŸããã
åé¡ã質åãããå Žåã¯ã httpsïŒ//github.com/feathersjs-ecosystem/feathers-typescript/issuesã«éä¿¡ããŠ
æãåèã«ãªãã³ã¡ã³ã
ãã©ãŒã¯wihã®å®çŸ©ïŒ
å°ãä»äºããããŸãããã矜ãšã¿ã€ãã¹ã¯ãªããã倧奜ãã§ã