ïŒ7125ããã®ãã£ãŒãããã¯ã¯ãäžéšã®äººã ãå®éã«ã°ããŒãã«UMDã©ã€ãã©ãªãšã€ã³ããŒããããUMDã©ã€ãã©ãªãçµã¿åãããŠäžèŽããããšãããã®ã§ãã
3ã€ã®ãã£ãšãããããªãã·ã§ã³ïŒ
åäœããããã«èãããŸãããããããåäœããŸããã
ç°¡åã«ããããã«ãªãã·ã§ã³3ã䜿çšããåŸåããããŸãããè«ççãªå Žæã§äœ¿çšã§ããé©åºŠã«åªããæ§æãŸãã¯æ§æãããã°ããªãã·ã§ã³2ãèŠãããšãã§ããŸãã TSLintã«ãŒã«ã§UMDã°ããŒãã«ã®äœ¿çšãæ€åºããããšã¯ã誰ãããããå®è¡ãããå Žåã¯ç°¡åã§ãã
åé²ãã1ã€ã®æ¹æ³ã¯ããªãã·ã§ã³3ãå®è£
ããããšã§ããããã€ã³ããŒããå¿ããããšã©ãŒãé »ç¹ã«çºçããå Žåã¯ãèš±å¯ãããUMDã°ããŒãã«ãæ瀺çã«æå®ããtsconfigãªãã·ã§ã³globals: []
ãè¿œå ããŸãã
ã³ã³ããã¹ãã«é¢ä¿ãªããã¹ãŠã®UMDã°ããŒãã«ãžã®ã¢ã¯ã»ã¹ãèš±å¯ãã代ããã«ãUMDã¢ãžã¥ãŒã«ã///<reference types=<>>
æ§æã®ãããããä»ããŠæ瀺çã«ãåç
§ããããŠããïŒã€ã³ããŒããããŠããªãïŒå Žåã«ã®ã¿ãUMDã°ããŒãã«ãžã®ã¢ã¯ã»ã¹ãèš±å¯ããæ¹ãç°¡åã§ã¯ãªãã§ããããã ããŸãã¯tsconfig.jsonã®types
æ§æãä»ããŠïŒ
èšãæããã°ãã¢ãžã¥ãŒã«å
ã§///<reference types=<>>
䜿çšãèš±å¯ããªãã®ã¯ãªãã§ããïŒ
/// <reference type="x" />
ãx
ã_ã©ãã§ã_ã°ããŒãã«ã«å©çšå¯èœã§ããããšãæå³ãããšèšã£ãå Žåãã©ããã®.d.tsãã¡ã€ã«ãå®éã«ã¯ã°ããŒãã«ã§ã¯ãªããã®ã誀ã£ãŠåç
§ããããšããããããŸãïŒããã¯ãDefinitelyTypedã®2.0ãã©ã³ããä¿å®ããŠããŠãéåžžã«äžè¬çãªãšã©ãŒã§ããããã§ãã
éã«ãããã_ãã®ãã¡ã€ã«ã§_ããå©çšã§ããªãå Žåã¯ãåç §ãã£ã¬ã¯ãã£ãããã¡ãã¡ã«ã³ããŒããŠè²Œãä»ããå¿ èŠããããããã¯æ¬åœã«é¢åã§ãã ãããã®ãã£ã¬ã¯ãã£ãã¯éåžžã¹ãçã§ããããããã¡ã€ã«åºæã®åäœãå°å ¥ããã®ã¯å¥åŠã§ãã
ããã§ããã ãŸãããããä»ã®èª°ã«ã圱é¿ãäžããŠããªãã®ã§ããã°ãããããçŸåšã®åäœãç¶æããæ¹ãè¯ãã§ãããã ã¢ãžã¥ãŒã«ãšããŠã®ã€ã³ããŒãã«å®å šã«ç§»è¡ããå¿ èŠããããŸãã
ç·šéïŒãããç§ä»¥å€ã®å€ãã®äººã ã«åœ±é¿ãäžããã®ãèŠãŠããããã§ãã
çŸåšã®çè«ã¯ãã¢ãžã¥ãŒã«ã®äœ¿çšã«ç§»è¡ãããã©ããã人ã ã«æ±ããããšã§ãã ä»ã®äººãããã«ééããå Žåã¯ã詳现ã調æ»ã§ããããã«ã䜿çšããŠããã©ã€ãã©ãªãæ£ç¢ºã«ã³ã¡ã³ãã«æ®ããŠãã ããã
ç§ã¯lodashã䜿çšããŠããŸãããããã«ã¯ç¬èªã®ã¿ã€ãã³ã°ã¯ä»å±ããŠããŸããã ãŸããã©ã³ã¿ã€ã ç°å¢ã§çžå¯Ÿãã¹ã€ã³ããŒãã¹ããŒãã¡ã³ãã䜿çšããã®ãæãç°¡åãªç¶æ³ããããŸãã ãããã£ãŠãã€ã³ããŒãã¹ããŒãã¡ã³ããšããŒã«ã«çžå¯Ÿãã¹ããã³ãã©ã«ããŒçžå¯ŸïŒã./fooãããã³ãN / barãïŒã®çµã¿åããããããŸãã
@types/lodash/index.d.ts
ãnode_modules/lodash/
ã«æåã§ã³ããŒãããšãã¿ã€ããã§ãã¯ãè¡ãããšãã§ããŸãã
ãããŸã§ã®ç§ã®åé¿çã¯///<amd-dependency path='../lodash' name="_">
ïŒ import
ã¹ããŒãã¡ã³ãã¯äœ¿çšããŠããŸãã../lodash
ïŒãæ®ããŸãã
ããããã®åé¡ã«ååè¿ãã·ããªãªã§ããããšãé¡ã£ãŠããŸããïŒ
æ確ã«ã§ããŸãã
ãŸããã©ã³ã¿ã€ã ç°å¢ã§çžå¯Ÿãã¹ã€ã³ããŒãã¹ããŒãã¡ã³ãã䜿çšããã®ãæãç°¡åãªç¶æ³ããããŸãã
ãããŠ
@types/lodash/index.d.ts
ãnode_modules/lodash/
ã«æåã§ã³ããŒãããšãã¿ã€ããã§ãã¯ãè¡ãããšãã§ããŸãã
ãé¡ãããŸãïŒ ç§ã¯ãã®ã·ããªãªã«ç²ŸéããŠããªãã®ã§ãããã®ç®çã¯äœã§ããããããŠãªãããã圹ç«ã€ã®ã§ããïŒ
ããã«ã¡ã¯ãã¿ããªã
çŸåšã®@types/bluebird
宣èšã®åé¡ã®è§£æ±ºçãæ¢ããŠããŸãïŒæéããããŠèªãã§ã¯ãããŸããïŒã .d.tsã«export as namespace Promise;
ãè¿œå ããããšã§åé¡ã解決ã§ããããšãããããŸãããããã®githubã®åé¡ã§èª¬æãããŠããåé¡ãçºçããŸããã
èŠããã«ãç§ã¯ä»¥äžãæ©èœããããã®ã§ãã
git clone -b vanilla-es5-umd-restriction-problem https://github.com/d-ph/typescript-bluebird-as-global-promise.git
cd typescript-bluebird-as-global-promise
npm install
export = Bluebird;
è¡ã®äžã«export as namespace Promise;
è¿œå ããŠã node_modules/@types/bluebird/index.d.ts
ç·šéããŸããnpm run tsc
çŸåšã®çµæïŒ
ããã€ãã®'Promise' refers to a UMD global, but the current file is a module. Consider adding an import instead.
ãšã©ãŒã
æåŸ
ãããçµæïŒ
ã³ã³ãã€ã«ã¯æåããŸãã
ãã®åé¡ã¯ãéçºè
ã®ã³ââãŒããšãµãŒãããŒãã£ã®ã³ãŒãïŒãã®å Žåã¯RxJSïŒã®äž¡æ¹ã§ã®Promise
䜿çšã«ãã£ãŠåŒãèµ·ãããããããç¹ã«å°é£ã§ãã åŸè
ã¯ã Promise
ãã°ããŒãã«ïŒJSæšæºã§æäŸïŒã§ãããšæ³å®ããŠãããããããšãã°import Promise from std; // (not that "std" is a thing)
ã䜿çšããããã«å€æŽãããããšã¯ãããŸããã
UMDã¢ãžã¥ãŒã«ãã€ã³ããŒãå¯èœãªã¢ãžã¥ãŒã«ãšã°ããŒãã«ã®äž¡æ¹ãšããŠäœ¿çšããæ¹æ³ãæ¬åœã«æè¬ããŠããŸãã
ããããšãã
-----------------------------æŽæ°
ç§ã¯ãã®åé¡ãå¥ã®æ¹æ³ã§è§£æ±ºããããšã«ãªããŸããïŒã€ãŸãã Promise
ãšPromiseConstructor
ã€ã³ã¿ãŒãã§ã€ã¹ã®æ¡åŒµã«ãã£ãŠïŒã
"globals": []
tsconfigãªãã·ã§ã³ã¯ãã©ãã«ã§ã衚瀺ãããããæãŸããããã§ãã UMD宣èšãæšæºã«ãªãã€ã€ããããã誀ã£ãŠã¢ãžã¥ãŒã«ã®ã€ã³ããŒããå¿ããå¯èœæ§ãé«ããªã£ãŠããŸãã çŸåšã®åäœãç¶æããããšãæ€èšããŠãã ããã ããã¯ãšã©ãŒã§ããã¯ãã§ãã
éžè©±çã«ããã€ã³ããªãªãŒã¹ã§ã°ããŒãã«ãªwindow.moment
å€æ°ãåé€ããããšãã®ããšãèŠããŠããŸãã ã©ãã«ã§ãäžå¯§ã«èŒžå
¥ããŠãããšæã£ãŠããã®ã§ããã5ãæãããå¿ããŠããŸããã
ãã¡ãããUMDããã±ãŒãžã¯å®è¡æã«ã°ããŒãã«ã¹ã³ãŒãã§äœ¿çšå¯èœã«ãªããŸããããã€äœ¿çšå¯èœã«ãªããã¯ãä»ã®ã¢ãžã¥ãŒã«ãããŒããããé åºã«ãã£ãŠç°ãªããŸãã
ããã«+1ã ç§ã¯ã¡ããã©SystemJSã§Reactã䜿ãããšããŠããŸããããReactã¯ããŸããã³ãã«ãããŠããªããããã¹ã¯ãªããã¿ã°ã§CDNããçŽæ¥ããŒãããŠããã ããªã®ã§ãReact / ReactDOMãªããžã§ã¯ãã¯ã°ããŒãã«ã«å©çšã§ããŸãã
ãã¹ããã©ã¯ãã£ã¹ãšããŠã³ãŒããã¢ãžã¥ãŒã«ãšããŠèšè¿°ããŠããŸãããããã¯ããŒãæã«å®è¡ããã1ã€ã®ã©ã³ã¿ã€ã ã¹ã¯ãªããã«ãã³ãã«ãããŸãïŒããŒã«ã¢ããïŒã import from
react / react-domãå®è¡ããããŒããŒããå®éã«ã¯ããããã¯ã°ããŒãã«ã§ã¯ãããŸããããšèšãããã«æ§æããã®ã¯é¢åã§ãïŒãããŠåã§ãïŒïŒhttpsïŒ/ã«ããWebPackæ§æã®äŸãšåæ§ïŒ /www.typescriptlang.org/docs/handbook/react-&-webpack.htmlïŒã ã¢ãžã¥ãŒã«ã§ããããã°ããŒãã«ãšããŠå©çšã§ããããã«ããæ¹ãã¯ããã«ç°¡åïŒãã€æ£ç¢ºïŒã§ãã ç§ãè©Šããæé ã¯ãçŽæçã«æããã®ã§ã次ã®ãšããã§ãã
npm install --save-dev @types/react @types/react-dom
"jsx": "react", "types": ["react", "react-dom"]
export function MyComponent() { return <div>{"Hello, world"}</div>; }
ReactDOM.render(...)
ãã ããããã«ãããšã©ãŒReact refers to a UMD global, but the current file is a module. Consider adding an import instead
ãŸãã
ãããããŸãæ©èœããå Žåãããã¯ãã¢ãžã¥ãŒã«ã§ããã³ãŒããè£ ã£ãŠãããã§ãªãããŒããŒ/ãã³ãã©ãŒãæ§æãããããã¯ããã«ç°¡åã§ãã ïŒãŸãã¯ã以äžãå«ããã¡ã€ã«ãè¿œå ããããšã§ãæåŸ ã©ããã®åäœãå®çŸããŸãããã¢ãžã¥ãŒã«ã¯ããšã©ãŒãªãã§ã°ããŒãã«ãšããŠReactïŒReactDOMã䜿çšã§ããŸãããå°ãéã/ããããŒã§ã-ãã£ãšç°¡åãªæ¹æ³ããããããããŸãããéããïŒïŒ
import * as ReactObj from "react";
import * as ReactDOMObj from "react-dom";
declare global {
var React: typeof ReactObj;
var ReactDOM: typeof ReactDOMObj;
}
ãªãã·ã§ã³3ãšã°ããŒãã«ã«ãåæããŸãïŒ[]ããã¯ã¢ããã ããã¯ãæ°æ§ã®ãŠãŒã¶ãŒã«ã¯ããªãçŽæçã«æãã人ã ãå¿ èŠãšããæ£ç¢ºãªæ©èœãæäŸããŸãã
ç§ã¯ã³ãŒãã®å°é家ã§ã¯ãªãã®ã§ã2ããã奜ãŸãããã©ããã¯ããããŸããããæ§æãåçŽã§ãããããçŽæçã«ãç解ã§ãããšæããŸãã
ãããã®ãããããå®è£ ããããã®æ¯æŽãæ€èšãããå Žåã¯ãã©ãã«è¡ãã°ããã§ããïŒ
ããã¯æ¬åœã«æã®åŸãã«ããã¯ãã§ãã ããã¯å€§èŠæš¡ãªãªãã¡ã¯ã¿ãªã³ã°ã®å±éºã§ãã ãã©ã°ãããã©ã«ãã§trueã«æå®ãããŠããå Žåã§ãã ããã¯å ã®ã·ããªãªã§åŒãç¶ãæ©èœããå¿ èŠããããšæããŸããããããªããšãUMD宣èšã®äž»ãªå©ç¹ã倱ãããŸãã
Reactã¯ããŸããã³ãã«ãããŠããŸãã
@billti詳ãã説æããŠããã ããŸããïŒ
import from
react / react-domãå®è¡ããããŒããŒããå®éã«ã¯ããã§ã¯ãªãããããã¯ã°ããŒãã«ã§ãããšèšãããã«æ§æããã®ã¯èŠçïŒãããŠåïŒã§ãã
ãã¥ãŒããªã¢ã«ã§ãããæžããå¯äžã®çç±ã¯ã externals
ã䜿çšãããšãã³ãã«æéãççž®ãããããã§ãã ã€ã³ããŒãããã«ã°ããŒãã«React
å€æ°ã䜿çšããå ŽåãåŸã§ã¢ãžã¥ãŒã«ã«ç°¡åã«åãæ¿ããããšã¯ã§ããŸããããã€ã³ããŒãã䜿çšãããšãä»»æã®ããŒããŒãæè»ã«äœ¿çšã§ããŸãã
ãã³ãã«ãæé©åããããšããŠããæ¹æ³ãšèŠ³å¯ããããµã€ãºã®äŸã«ã€ããŠã¯ããã®åé¡ïŒhttps://github.com/rollup/rollup/issues/855ïŒãåç §ããŠãã ããã äºå®äžãïŒããŒã«ã¢ããã䜿çšããïŒã»ããã¢ããã§ã¯ãReactããã³ãã«ããããšã§æå°éã®ãµã€ãºã®å¢å ãèŠãããã®ã§ãCDNããæäŸããããšæããŸãã ç§ã«ãšã£ãŠãããã«ã¯æ¬¡ã®å©ç¹ããããŸãã
aïŒç§ã®ãµã€ããžã®ãªã¯ãšã¹ãïŒããã³åž¯åå¹
ïŒãå°ãªããªããŸãã
bïŒãã«ããã§ãŒã³ã«ãã³ãã«ããã®ã«ãããæéãççž®ãããŸããã
cïŒå€æŽãããã·ã¥ãããã³ã«ã¯ã©ã€ã¢ã³ãã«åããŠã³ããŒãããã³ãŒããå°ãªããªããŸãïŒåããŠã³ããŒãããããã³ãã«ã«ã¯ã³ãŒãã®ã¿ãå«ãŸããReactã¯å€æŽãããã«ã¯ã©ã€ã¢ã³ããã£ãã·ã¥ã«ããããã304ãååŸãããŸãïŒã
ãµã€ãã®èªã¿èŸŒã¿æã«ChromeéçºããŒã«ãèŠããšãGZipped HTTPæ¥ç¶ã®ReactãšReact-domïŒçž®å°çïŒã¯ããã47kbã®ãããã¯ãŒã¯ãã©ãã£ãã¯ã§ããããµã€ãäžã®ã»ãšãã©ã®ç»åãããå°ãªãã®ã§ãç§ã¯ããã§ã¯ãããŸãããšã«ããããã»ã©å€§ããªå©çãåŸãããªãéãïŒããšãã°50ïŒ ã®åæžïŒãããã ãåæžããããšããããšãå¿é ããŠããŸããã
è£éºãšããŠïŒTypeScriptã³ã³ãã€ã©èªäœã«ã¯ããã®ã¢ãžã¥ãŒã«ã¯æ¬åœã«ã°ããŒãã«ã§ãããšèšãããã®æ§æããªãããããã®ãªãã·ã§ã³ããªããšããããã®ã€ã³ããŒããæé€ãããã³ãã©ãŒã䜿çšããããã«åŒ·å¶ãããããšã«ã泚æããŠãã ãããå®è¡æã«è§£æ±ºãããªãã¢ãžã¥ãŒã«ã®ã€ã³ããŒãïŒãŸãã¯èŠæ±ãå®çŸ©ïŒãçºè¡ããŸãã
@billti SystemJSã¯ããã®ã·ããªãªãå®å šã«ãµããŒãããŠããŸãã éçºäžã«ããŒã«ã«ã«ã€ã³ã¹ããŒã«ãããããã±ãŒãžã䜿çšããããšãšãæ¬çªç°å¢ã§CDNã䜿çšããããšãåãæ¿ããããšãã§ããŸãã ãŸãããã¹ãŠã®ã€ã³ããŒãããäžåºŠãã§ãããããæåã«å¿ èŠã«ãªã£ããšãã«ãŠã£ã³ããŠãªããžã§ã¯ãã«ã¢ã¿ãããããã°ããŒãã«å€æ°ãžã®åç §ãå®éã«ç€ºãå¿ èŠãããããšãæå®ããã¡ã¿ããŒã¿ãå®å šã«ãµããŒãããŠããŸããæ¬çªç°å¢ã§ã¯ãããã¯CDNããååŸã§ããŸãã ç§ã¯ãããreactã§å®è¡ããŠããŸããããAngular1.xã§å®è¡ããŸãã
ããããšã@aluanhaddad ã èå³æ·±ã...ç§ã¯å®éã«ããã®é害ã«ã€ãªãããããªäœããæ©èœãããããšããŠããŠããããç解ã§ããªãã£ãã®ã§ãä»æãSystemJSãªããžããªã§è³ªåããŸããã https://github.com/systemjs/systemjs/issues/1510ãéæããæ¹æ³ã«çããããšãã§ããã°ãããã¯æ¬åœã«åœ¹ã«ç«ã¡ãŸã:-)
泚ïŒã³ãŒããå®è¡ããããã«ã€ã³ããŒããã°ããŒãã«ã«ãããããã«ã¯ãSystemJS / WebPack / Rollupãªã©ã®ãããªãã®ãå¿ èŠãªãããTypeScriptèªäœã«ããemitã¯ãããªãã§ã¯äœ¿çšã§ããªããšããä»ã®ã³ã¡ã³ãã¯ãŸã æ®ã£ãŠããŸãã
ç§ã¯å®éã®äŸãäœãããšãã§ãããã©ããèŠãŠã¿ãŸããç§ã¯ãããããªãé·ãéããŠããŸããããããŠç§ã¯ãã®æã«æã£ãŠãããœãŒã¹ã³ãŒãã«ã¢ã¯ã»ã¹ã§ããŸããããç§ã¯100ããŒã»ã³ã確信ããŠããŸããããå¯èœã ã
2ã€ç®ã®ãã€ã³ããšããŠãããã¯ãŸãã«SystemJSãè¡ãããšã§ãã ãããã®ã€ã³ããŒããã°ããŒãã«ã«ãããããã°ããŒãã«ãå®éã«èŠæ±ãããŠããããã§ã«ããŒããããŠããããšãç解ããŸãã åºåã¯ééããªã䜿çšå¯èœã§ã
åèïŒSystemJS APIã䜿çšããŠSystemJSã§ãããæ©èœããã httpsïŒ//github.com/systemjs/systemjs/issues/1510ã«ãœãªã¥ãŒã·ã§ã³ãè¿œå ããŸããã ããããšãã
ç§ã®2çªç®ã®ãã€ã³ãã«ã€ããŠïŒã¯ããããããŸãã«ããŒããŒãã§ããããšã ãšç§ã¯ç¥ã£ãŠããŸãã ãããç§ã®ãã€ã³ãã§ããã€ã³ããŒããããã¢ãžã¥ãŒã«ãã°ããŒãã«ã«ãããã§ããŸãããTypeScriptã¯ãããã§ããŸããããã®ãããå®è¡æã«ã³ãŒããæå¹ã«ããã«ã¯ããŒããŒã䜿çšããå¿ èŠããããŸãã ãããã£ãŠããã®å ã®åé¡ã®ãã£ãã22ã§ãããã°ããŒãã«ïŒãã®å Žåã¯ReactïŒãã¢ãžã¥ãŒã«ã§äœ¿çšå¯èœã§ããããšã宣èšã§ããªãå Žåã¯ãã¢ãžã¥ãŒã«ã§ãããã®ããã«ã€ã³ããŒãããå¿ èŠããããŸãïŒããã§ã¯ãããŸããïŒã ã
ç§ã®ä»ã®ã³ã¡ã³ãã¯ãã³ãŒããå®è¡ããããã«ã€ã³ããŒããã°ããŒãã«ã«ãããããããã«SystemJS / WebPack / Rollupãªã©ã®ãããªãã®ãå¿ èŠãªãããTypeScriptèªäœã«ããemitã¯ãããªãã§ã¯äœ¿çšã§ããªããšããããšã§ãã
@billtiããããŸããã ã¢ãžã¥ãŒã«ã®ã°ããŒãã«ããŒãžã§ã³ã䜿çšããããšãå¯äžã®ãªãã·ã§ã³ã§ããããTypeScriptã§ã¯ãããã§ããªãã·ããªãªã¯äœã§ããïŒ ã©ã€ãã©ãªãã°ããŒãã«ãšã¢ãžã¥ãŒã«ã®äž¡æ¹ãšããŠå©çšã§ããã·ããªãªãèŠãã ãã§ãã
@DanielRosenwasser圌ã¯ãReactãããŒããããæ¹æ³ã®ããã«ãã°ããŒãã«ãªããžã§ã¯ãã®ã¡ã³ããŒã®ããã«ãå®è¡æã«å®éã«ã¯ã°ããŒãã«ã§ããããšãæå³ããŠãããšæããŸãã
@billtiããªããããã
ããªãã®2çªç®ã®ãã€ã³ãã«ã€ããŠïŒç§ã¯ããªããäœãæå³ããã®ãããããŸãã
ç§ã®æãã§ã¯ããã©ãŠã¶ãŒã®ã·ããªãªã§ã¯ãRequireJSã®ãããªããŒããŒãŸãã¯Webpackã®ãããªããã±ãŒãžã£ãŒã䜿çšããå¿
èŠããããããã¢ãžã¥ãŒã«ããµããŒããããã©ãŠã¶ãŒã¯ãŸã ãªããããéãã¯ãããŸããã ïŒãã£ã¯ã©ã¯æã®åŸãã§ãããå©çšã§ãããšèããŸããïŒã ãããã£ãŠãè¿œå ã®ããŒã«ããªããã°ãã³ãŒããå®è¡ããæ¹æ³ã¯ãŸã£ãããããŸããã define
ã require
ããŸãã¯System.register
ãå«ãåºåããåºåããã_JavaScript_ã³ãŒãã移æ€ã§ããªãå¯èœæ§ãé«ãããšãæå³ããŸãã ãã ãããã¢ãžã¥ãŒã«ãšã¢ãžã¥ãŒã«ã§ã¯ãªããã®åºå¥ã®éèŠæ§ã¯ããããŸãã
ãã®åé¿çã䜿çšããŠãå°ãªããšããã¢ãžã¥ãŒã«ãã1åã ãåç §ã§ããŸãã
_shims.d.ts_
import __React from 'react';
declare global {
const React: typeof __React;
}
ããããã°ãã€ã³ããŒãããã«ä»ã®å Žæã§äœ¿çšã§ããŸãã
ãŸããReactãã°ããŒãã«ã«ãªã£ãããšãèšã£ãŠããã®ã§ãå°ãåä»ãªå Žåã§ããããã¯éåžžã«æ確ã§ããããã¯ãReactãã€ã³ããŒãããå¿
èŠããªããªã£ãçç±ã§ããããŸãã
ããªãã®shims.d.tsã«é¢ããŠãããªããããã€ãã®æçš¿ãäžã«è¡ããªãã°ãããªãã¯ãããä»ã®ãšããç§ãããããšã§ããããšããããã§ãããïŒå倧ãªå¿ã¯åãããã«èããŸãïŒ;-)
ç§ã¯ãããããã€ãã®æ¹æ³ã®1ã€ã§æ©èœãããããšãã§ããŸãããããã¯éèŠã§ã¯ãããŸããã TypeScriptãç°¡åã«æ¡çšã§ããããã«ãããŠãŒã¶ãŒã絶æã®èœãšãç©Žã§ã¯ãªãæåã®èœãšãç©Žã«é¥ãããããšããŠããŸãã ãã®ããšã念é ã«çœ®ããŠãTypeScriptã䜿ãããšããŠåé¡ãçºçããå Žåãç§ã¯ãã2ã€ã®è³ªåãããŸããaïŒããã¯æå¹ãªã³ãŒãã§ãããbïŒé¡§å®¢ã¯ãããè©ŠããŠã¿ãããšããŠããŸããã
ïŒTypeScript以å€ã®ïŒããŒãžã§ã³ãBabelã§ããããããšããå ¥åã«ãããæéãšã»ãŒåãæéã§å®è¡ããŠããããšãèãããšãã³ãŒãã¯æå¹ã§ãããšèšã£ãŠãéèšã§ã¯ãããŸããã Reactããã¥ã¡ã³ãã®ã€ã³ã¹ããŒã«ããŒãžã«CDNã®ã¹ã¯ãªããã¿ã°ã
TypeScriptãã³ãŒããæžãç¹å®ã®æå¹ãªãã¿ãŒã³ããµããŒãããªãå Žåã¯ããããããã«æããã«ããŠã人ã ãæ£ããå°ãããã«ããå¿ èŠããããŸãïŒããã¯ãšã©ãŒã¡ãã»ãŒãžãç°¡æœãªããã¥ã¡ã³ãã§è¡ãã®ãé£ããããšã§ãïŒã ããããå人çã«ã¯ãTypeScriptããã¿ãŒã³ããµããŒãããã¹ãã§ã¯ãªããšæããŸãããªããªãããã¿ãŒã³ãããã¹ããã©ã¯ãã£ã¹ããŸãã¯ãæšæºçãã§ãããšã¯æããªãããã§ãã ã³ãŒããæå¹ã§ãäžéšã®JavaScriptéçºè ãã³ãŒããèšè¿°ãããå Žåã¯ãTypeScriptã§ãµããŒããè©Šã¿ãå¿ èŠããããŸãã TypeScriptãæ©èœãããããã«ãã³ãŒããå€æŽãããã«ããã€ãã©ã€ã³ãåæ§æããå¿ èŠãããã»ã©ïŒããã§ã¯ãäºçŽ°ãªã¢ããªã移è¡ããããšããå§ãããŸãïŒãéçºè ã®ç§»åã¯å°ãªããªããŸãã
解決çã«ã€ããŠã¯...ããã§åŸãåãã ãã§ããããããžã§ã¯ãå
šäœã§äœ¿çšã§ããAPIããã§ã«å¹æçã«å®çŸ©ããŠãããlibãã³ã³ãã€ã©ãªãã·ã§ã³ããã©ã€ãã©ãªãã°ããŒãã«ã«è¿œå ããããã«@types/name
圢åŒã®å€ãåãå¯èœæ§ããããŸãïŒãããŠããããçžå¯Ÿãã¹ããµããŒãããŸãïŒã
TypeScriptãç°¡åã«æ¡çšã§ããããã«ãããŠãŒã¶ãŒã絶æã®èœãšãç©Žã§ã¯ãªãæåã®èœãšãç©Žã«é¥ãããããšããŠããŸãã
ç§ãã¡ã¯ä»ããŠãŒã¶ãŒãæåã®èœãšãç©Žã«å°ãããšããŠ
export as namespace foo
æ§é ãäœæããŸãã@billti
ããªãã®shims.d.tsã«é¢ããŠãããªããããã€ãã®æçš¿ãäžã«è¡ããªãã°ãããªãã¯ãããä»ã®ãšããç§ãããããšã§ããããšããããã§ãããïŒå倧ãªå¿ã¯åãããã«èããŸãïŒ;-)
ç³ãèš³ãããŸããããç§ã¯ãããéããŸããããšãŠãçŽ æµã§ã;ïŒ
TypeScriptããã¿ãŒã³ããµããŒãããã¹ãã§ã¯ãªããšæããŸãããªããªãããããã¯ããã¹ããã©ã¯ãã£ã¹ããŸãã¯ãæšæºçãã§ãããšã¯æããªãããã§ãã
TypeScriptãããã§èŠç¯çã§ãããšã¯æããªããç§ã¯ããã䞻匵ããããšãããŠãããšæããç§ã«ãšã©ãŒããããšç§ã«åããã å€ãã®ã©ã€ãã©ãªã«ã¯ãã°ããŒãã«ãšããŠèªåèªèº«ãããŒãããŠããESã¢ãžã¥ãŒã«æ§æã®äœ¿çšã«é²ããã¢ãšãã¥ãŒããªã¢ã«ããããŸãã ããããããšã§åœŒããæé«ã®åžæ°ã«ãªã£ããšã¯æããŸããããããã¯ãŸãå¥ã®è°è«ã§ãã
ãšã¯èšããã®ã®ãã¢ãžã¥ãŒã«ãäž»ã«ã°ããŒãã«äžã§_ç¥èŠããã_æ§æç³è¡£æ§æãšããŠäœ¿çšãããå Žåããããã¯æ§æç³è¡£æ§æã§ã¯ãªãããã倱æã¯ããããã«ãããŸãã ã©ã¡ãããšããã°ããããã¯æ§æäžã®å¡©ïŒããããçšéïŒïŒã§ãããçã®ã³ãŒãåé¢ãã¹ã¯ãªããã¿ã°ã®é åºä»ãããã®è§£æŸãæ瀺çãªäŸåé¢ä¿ã®å®£èšãã°ããŒãã«ååä»ãå°çããã®è±åºãªã©ã®å©ç¹ã®ããã«æ¶è²»ããŸãã ã¢ãžã¥ãŒã«ã®æ§æã¯äººéå·¥åŠçã§ã¯ãªããããããåé·ã§ãããã¢ãžã¥ãŒã«ã®ã»ãã³ãã£ã¯ã¹ã䟡å€ã®ãããã®ã«ãªã£ãŠããŸãã
å°ãªããšã.ts
ãã¡ã€ã«ã§TypeScriptã䜿çšããŠããå Žåã¯ã匷åãªéçã³ãŒãåæã®ã¡ãªããã享åããããšèããŠããŸãã ããã«ã¯ãReactãååšããããããã«ã€ããŠã®ç¥èããªããšä»®å®ããŠããããè¡ããŸããã ããã¯ãESã¢ãžã¥ãŒã«ãéç解æã«é©ããŠããããã«æå³çã«æå®ãããŠããå Žåã§ãåœãŠã¯ãŸããŸãã
@DanielRosenwasser
ã¢ãžã¥ãŒã«ã«ãã£ãŠã€ã³ããŒããããªãå Žåã«ã®ã¿è¡šç€ºãããåå空éfooæ§é ãšããŠæ¡åŒµãšã¯ã¹ããŒããäœæããŸãã
ããã解決ããæè¯ã®æ¹æ³ã®ããã«æããŸãã
ãããåé¡ãåŒãèµ·ãããå¥ã®ã±ãŒã¹ã¯æ¬¡ã®ãšããã§ãã
ç§ãçŸåšåãçµãã§ãããããžã§ã¯ãã§ã¯ãããŒã«ã«ã€ã³ã¯ã«ãŒãïŒäž»ã«æŽå²çãªçç±ã§ïŒãšnpmã¢ãžã¥ãŒã«ãçµã¿åãããŠããŸãã æçµçã«ã¯ãRollupãŸãã¯Browserifyã䜿çšããŠãã¹ãŠãçµåããããããåé¡ãããŸããã
ã³ãŒãããŒã¹ã«ã³ããŒããã ãã®emojioneãããžã§ã¯ãã®.jsãã¡ã€ã«ã䜿çšããŸãã åŸã§ããã®å宣èšãDefinitelyTypedã«è¿œå ããŸãããhttps ïŒ
npmã¢ãžã¥ãŒã«ã«ç§»è¡ããªãçç±ã¯ãnpmã¢ãžã¥ãŒã«ã«ãæ°ã¡ã¬ãã€ãã®ã¹ãã©ã€ããšPNGããã³ãã«ãããŠããããã§ãã ãã®1ã€ã®200KiBã¹ã¯ãªãããå¿ èŠã§ãã å宣èšããã
AngularJSã®å Žåãåé¿çã¯declare var angular: ng.IAngularStatic
ã ããããããã¯åå空éã§ã¯æ©èœããŸããããïŒ
@dbrgnå¥ã®åé¡ãçºçããŠããŸãã ã¢ãžã¥ãŒã«ãå®éã«ã°ããŒãã«ã§ããå Žåãã¿ã€ãå®çŸ©ã¯æ£ãããããŸããã ã°ããŒãã«ã宣èšããããšããUMDã¹ã¿ã€ã«å®£èšïŒããã¯UMDã¹ã¿ã€ã«å®£èšã«é¢ãããã®ã§ãïŒã§ããããŸãããå®éã«ã¯ãçŽç²ãªESã¢ãžã¥ãŒã«ã®ã¿ã宣èšããŸãã
ã¢ãžã¥ãŒã«ãã°ããŒãã«ãè¡šãå Žåã¯ããã¡ã€ã«ã®æäžäœã§ãšã¯ã¹ããŒãããªãã§ãã ãããããã«ãããã¢ãžã¥ãŒã«ãã¢ãžã¥ãŒã«ã«ãªããŸãã
AngularJSã§ã¯ãåé¿çã¯varangularïŒng.IAngularStaticã宣èšããããšã§ããã ããããããã¯åå空éã§ã¯æ©èœããŸããããïŒ
åå空éã§æ©èœããŸãã
èšèšäŒè°ã§ã®è°è«ã®çµæãUMDãåžžã«èš±å¯ããçŸåšã®å¶éãé©çšãããã©ã°ãè¿œå ããããšãæ€èšããŸããã ãã®å¶éã¯ãUMDã°ããŒãã«ããã¿ã€ãã«ã¢ã¯ã»ã¹ããå Žåã«ãæ¡åŒµãããŸãã
ããã«ã€ããŠãã£ãšèããŠã¿ãŠããæ°ãã宣èšã®çš®é¡ãäœæããæ¹ããããšæããŸãã ãã®ãã©ã°ã¯ã宣èšãã¡ã€ã«ã®äœæè ã1åã ãæžã蟌ãå¿ èŠãããæ°ããæ§æãããæ€åºããã«ãããªã£ãŠããŸãã
ããã¯ãæ¢åã®ã³ãŒããšããŒã«ã«ã©ãããŠãå¿ èŠã§ãã ãã®ãããªæãŸã§ãJavascriptã¯é«éã§åçãåæ¢ããã¢ãžã¥ãŒã«ã·ã¹ãã ã§è² ãããŸã§ãååšããã³ãŒããæè»ã«åŠçããå¿ èŠããããŸãã èŠåãçºããŸããããã«ãã倱æãããªãã§ãã ããã ç§ã¯ãã¬ã¬ã·ãŒã³ãŒããããŒã«ã¢ãããšã¿ã€ãã¹ã¯ãªããã§ããŸãæ©èœãããããšã«å¯ŸåŠããããšã«äœæ¥ãç¡é§ã«ããŠããŸããã
UGHã
Javaãç¬ãã®ã奜ããªäººã¯ãããããããšæããŸãããåºæ¬çãªJavaã¢ãžã¥ãŒã«ã¯å°ãªããšãæ©èœããŸãã ç¶ã¯åã
14ã®ç°ãªãã¢ãããã¯ã¢ãžã¥ãŒã«æšæºã«é©åãããå¿ èŠã¯ãããŸããããŸãã¯ããã®æ¥ã®ããŒã«ã¢ãã/ãã³ãã«ããŒã«ãå®éã«æ¶è²»ãã圢åŒã®ãœãŒã¹ãã¡ã€ã«ããjsã¢ãžã¥ãŒã«ãã³ã³ãã€ã«ããŠã¿ãŠãã¢ãžã¥ãŒã«åœ¢åŒãçæããå¿ èŠããããŸãããããã¯ãTypescriptã®ã€ã³ããŒã/ãšã¯ã¹ããŒãã¹ããŒãã¡ã³ããšãµãŒãããŒãã£ã®d.tsãã¡ã€ã«ã§ããŸãæ©èœãããããTSCã¯ããããŒã³ã€ã³ããŒãã䜿çšããã ãã§ãã°ããŒãã«ãªATã«ãªãããšèšãã®ã§ã¯ãªããå®éã«ã³ãŒãããã«ãããããšã決å®ããŸããå®è¡æéãã
shims.d.tsããã¯ã¯ããŸãæ©èœããŸãã ããããããã
Webpackã䜿çšããŠãã人ã®ããã®äžæçãªè§£æ±ºçhttps://github.com/Microsoft/TypeScript/issues/11108#issuecomment-285356313
ç®çã®UMDã°ããŒãã«ã䜿çšããŠexternals
ãwebpack.config.js
è¿œå ããŸãã
externals: {
'angular': 'angular',
'jquery': 'jquery'
"react": "React",
"react-dom": "ReactDOM"
}
ããã«ãããæ¢åã®ã³ãŒãããŒã¹ã®ç§»è¡ã容æã«ãªãã¯ãã§ãã
jQueryãã°ããŒãã«ãšããŠå«ãŸããŠããrequirejsã§å®è£ ããããããžã§ã¯ãããããŸããããã¯ãã°ããŒãã«ãšããŠèŠã€ãã£ãå Žåã«ã®ã¿jQueryãæ¡åŒµãããã©ã°ã€ã³ãããã€ãããããã§ãã
äžéšã®ã¢ãžã¥ãŒã«ã®ã³ãŒãã¯ãã®ãã©ã°ã€ã³ã«äŸåããŠãããjQueryãã¢ãžã¥ãŒã«ãšããŠã€ã³ããŒããããå Žåã¯äœ¿çšã§ããŸããã ãããæ©èœãããã«ã¯ãã¢ãžã¥ãŒã«ãšããŠããŒããããjQueryã§åäœããããã«ãã¹ãŠã®ãã©ã°ã€ã³ãå€æŽããã¢ãžã¥ãŒã«ãšããŠãããŒãããå¿ èŠããããŸãïŒå¿ èŠãªå Žæãæšæž¬ããŸãïŒã
ãã®äžãã¢ãžã¥ãŒã«ããŒããŒãªãã§javascriptã䜿çšããããŒãžããããŸãã ãããã£ãŠããã©ã°ã€ã³ã¯ã°ããŒãã«ãšã¢ãžã¥ãŒã«ã®äž¡æ¹ã§æ©èœããå¿ èŠããããŸãã
jQueryãšã¯å¥ã«ãããã¯ã¢ãŠããªã©ã®åãåé¡ãæã€ä»ã®ã¹ã¯ãªããããããŸãã ããã«ããããããžã§ã¯ãã®ç§»è¡ãç°¡åã«ãªããŸãã ãŸãã¯ãçŸå®çãªèŠ³ç¹ããã¯ãå®è¡äžå¯èœã§ãã
ãã¡ãããããã¯æè¯ã®ãã¿ãŒã³ã§ã¯ãªããæ°ãããããžã§ã¯ãã§ã¯äœ¿çšããŸããã ãããããã®åé¡ãæ±ããŠããã®ã¯ç§ã ãã§ã¯ãªããšæããŸã
ããã«tsconfig.json
ã§types
ã䜿çšããã®ã¯çã«ããªã£ãŠããŸããïŒ ããšãã°ã types
èšå®ãããŠããªãå ŽåãçŸåšã®æé»çãªåäœãåŸããã types
èšå®ãããŠããå Žåãæåéãããããã¯ã°ããŒãã«ã§ãããšèšã£ãŠãããUMDåå空éãã°ããŒãã«ã«è¡šç€ºãããããšãã§ããŸãã ããã¯ãšã«ããä»æ¥ååšããäžçš®ã®æ¯ãèãã§ãïŒã°ããŒãã«ãªåãé€ããŠïŒã ããã¯ãæ°ããglobals
ãªãã·ã§ã³ãå°å
¥ããããšãšã¯å¯Ÿç
§çã§ãã
ããã¯ããèãã ãšæããŸãã ç§ã®å ŽåãUMDã©ã€ãã©ãªãã°ããŒãã«ãšããŠäœ¿çšããã¹ã¯ãªãããšãã¢ãžã¥ãŒã«ãšããŠäœ¿çšããã¹ã¯ãªããããããŸãã ããããã®ã±ãŒã¹ã«å¯ŸåŠãã2ã€ã®ç°ãªãtsconfig.jsonã䜿çšããŠããã®åé¡ã解決ã§ããŸãã æ¬åœã«ãŸã£ããã§ãã
@blakeembrey types
ããããšã¯çã«ããªã£ãŠããŸããããã§ã«åé¡ãããããããªãŒããŒããŒãã®æŠå¿µã«ã¯ããŸãç±å¿ã§ã¯ãããŸããã ããšãã°ã <reference types="package" />
æ§é ã«ã¯ã "paths"
ãµããŒãããªããšããå¶éããã§ã«ãããŸãã "package"
ã¯ã @types
å
ã®ãã©ã«ããŒåã
ãã®äŒè©±ã®åŸãç§ã¯èŠåŽããŠããŸãã ããã«é¢ããæŽæ°ãŸãã¯èšç»ããã解決çã¯ãããŸããïŒ ããã¯ãlodashãã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠäžå¯æ¬ ãªéšåã§ããå ŽåãããŠã£ã³ããŠã«äŸåããã ãã§ãªããããå€ãã®ãµãŒãããŒãã£ã©ã€ãã©ãªãããã¢ãžã¥ãŒã«åãããæ§é ã«å€æãããå Žåãªã©ã®ã·ããªãªã§åœ¹ç«ã€å¯èœæ§ãããããã§ãã
ããã«å¯ŸåŠããããŸãã¯å°ãªããšãçŸåšå©çšå¯èœãªãªãªãŒã¹ã§ãããã©ã®ããã«è§£æ±ºããå¿ èŠãããããææžåããããã®èšç»ãããæ¹æ³ã¯ãããŸããïŒ
ããã«ã¡ã¯@mochawichReactãå€éšãšããŠå®çŸ©ãã declare global
æ§æã䜿çšããªããšã次ã®ãšã©ãŒãçºçããŸãã
TS2686: 'React' refers to a UMD global, but the current file is a module. Consider adding an import instead.
@cantuxTypeScriptã¯Webpackæ§æãèªã¿åããŸããã Reactãã°ããŒãã«ã«å©çšã§ããããã«ããå Žåã¯ããããdeclare
ã§ããŸãããã¢ãžã¥ãŒã«ã䜿çšããªãã®ã¯ãªãã§ããïŒ
@aluanhaddadã¯ãäž»ã«ã€ã³ããŒãåŒã³åºãã«ãã£ãŠè¡ãããäœæ¥ãšæ··åãããããã§ãã ç§ã¯ããã€ãããããŸããã次ã®ã¹ããŒãã¡ã³ãã¯æ£ããã§ããïŒ
ã¢ãžã¥ãŒã«ãã€ã³ããŒãããéã«ãå°é¡ã®ãªã¯ãšã¹ãæéãæ¯æã£ãŠããŸãã ããã«ããã䜿çšããŠãããã®ãã¡ã¢ãªå ã§äœ¿çšå¯èœã«ãªããŸãã以åã«èŠæ±ãããå Žåãã¢ãžã¥ãŒã«ã¯ãã£ãã·ã¥ããããŒããããã¢ãžã¥ãŒã«ãååšããªãå Žåã¯ãã§ãããããŸãã ãã®ãªã¯ãšã¹ããåé¿ãããå Žåã¯ãäœããã°ããŒãã«ãšããŠå®çŸ©ããã ãã§ãTypescriptã¯ãããå©çšå¯èœã§ããããšãç²ç®çã«ä¿¡é ŒããŸãïŒã¹ããŒããã³ãã©ãŒã䜿çšããå Žåã¯ãã€ã³ããŒãã¹ããŒãã¡ã³ãã眮ãæãããåé€ãããããããšãã§ããŸãïŒã
ããããæ£ãããã°ãç°¡æœã«ããããã«ã³ã¡ã³ããåé€ã§ããŸããã¹ã¬ããã¯ãã®ãŸãŸã§ã¯å·šå€§ã§ãã
@codymullinsãäžèšã§å°ããããã«ã誰ãããã®åé¡ã®çŸåšã®åé¿çãèŠçŽã§ããŸããïŒ lodashã¿ã€ãã®å®çŸ©ãæŽæ°ãããšãããTS2686ãšã©ãŒãããããçºçããŸããã
ç§ã®çŸåšã®åé¿çã¯ãtypedefãã¡ã€ã«ãããã¯ããŠå€ãåäœæšæºã«æºæ ãããããšã§ããããããå€ãã®typedefãã¡ã€ã«ãå£ãå§ããå Žåãããã¯å®è¡å¯èœã§ã¯ãããŸããã
ç§ã®ã·ããªãªã¯æ¬¡ã®ãšããã§ãã
äžèšã®shimã®äŸã¯æ©èœããŸãããvscodeã¯ãšã©ãŒãšããŠåŒ·èª¿è¡šç€ºããŠããŸãïŒããã§ãæ£åžžã«å®äºããŸãïŒïŒ
ã¢ãžã¥ãŒã«ã§UMDã°ããŒãã«ã«ã¢ã¯ã»ã¹ãããšãã«ãšã©ãŒãåºããªãã§ãã ããã ç§ãåãçµãã§ãã倧èŠæš¡ãªãããžã§ã¯ãã¯AngularJSã§è¡ãããã¢ããªã±ãŒã·ã§ã³ã«Typescriptã䜿çšããŠããŸããããã¡ããã angular
UMDã°ããŒãã«ã¿ã€ããš@types/angular
Angularã¿ã€ãã«ã€ããŠç¥ãã«ã¯Typescriptãå¿
èŠã§ãã ããªãã¯ãããè¿œå ãšåãããã«ç°¡åã«ãªããšæãã ãã"angular"
ããtypes
ã§tsconfig.json
ãããããäœããã®çç±ã§ãããã¯ãªãããšTSCã¯ç§ã«å«ã³ãŸãã ãã¹ãŠã®NPMããã±ãŒãžãçŽç²ãªTypescriptã§ãããšããã®ã§ããããããã®ã»ãšãã©ã¯ãã¬ãŒã³ãªJSã§ãããéåžžã«é·ãé䜿çšãããŸãã d.ts
ãã€ã³ããŒããããšãã«ãUMDã°ããŒãã«ãååšãããšèšã£ãŠTSCãã·ã£ããããŠã³ã§ããªãçç±ãããããããŸããã ãã®ç¶æ³ã¯äžè¬çã§ã¯ãããŸããããããŸã§ã«åãçµãã ãã¹ãŠã®Typescriptãããžã§ã¯ãã§ã¯ãå°ãªããšã1ã€ã®JSã©ã€ãã©ãªã䜿çšããŠãããèªåã§ãã³ãã«ããŠãåå®çŸ©ã䜿çšããŠåç
§ããå¿
èŠããããŸãã
ããã«é¢ããæŽæ°ã¯ãããŸããïŒ
ç§ã®ãŠãŒã¹ã±ãŒã¹ïŒCDNãå€çšããæ¢åã®å€§èŠæš¡ãªã³ãŒãããŒã¹ã«åãçµãã§ããŸãã äžè¬çãªãŠãŒãã£ãªãã£ã¯ãã¹ã¯ãªããã¿ã°ãä»ããŠå€ãã®ããŒãžïŒclipboardjsãlodashãªã©ïŒã«ã€ã³ããŒããããŸãã ãããã®ã°ããŒãã«å€æ°ã¯ããŒãžã§å
¥æã§ããã®ã§ãåç
§ããããšæããŸãã ã¢ãžã¥ãŒã«ã䜿çšããã«ãé¢é£ãããœãŒã¹ãã¡ã€ã«ã®å
é ã«/// <reference type="$name" />
ã䜿çšããŠãtypescriptãã³ã³ãã€ã«ããã®ã¯ç°¡åã§ãã ãã ããã¢ãžã¥ãŒã«ãäœæããããšãããšãããã¯æ©èœããªããªããŸãã
ã¹ã¬ããã§ã¯2ã€ã®ã¢ãããŒããææ¡ãããŠããããã§ãã
/// <reference type="$name" />
ã€ã³ããŒãããŒã¯ã³ãçŸåšã®ãã¡ã€ã«ã®åå空éã«ã®ã¿å
¥ããŸãã
tsconfig.json
ã®ã³ã³ãã€ã©ãªãã·ã§ã³/æ§æå€æ°ïŒäŸïŒ "globals"
ã "types"
ïŒ
ã©ã¡ãã®ã¢ãããŒããè¯ããšæããŸãã @RyanCavanaughã«ãããªãã·ã§ã³1ã®æ¹å€ã«ã¯åæããŸããïŒ
éã«ããã®ãã¡ã€ã«ã§ã®ã¿äœ¿çšã§ããå Žåã¯ãåç §ãã£ã¬ã¯ãã£ããã³ããŒããŠè²Œãä»ããå¿ èŠããããããã¯éåžžã«é¢åã§ãã
çŸåšã®åäœã®ããã«ãUMDã°ããŒãã«ãšäžç·ã«ã¢ãžã¥ãŒã«ã䜿çšã§ããªãããšã¯ã¯ããã«åä»ã ãšæããŸãã ããã€ãã®åé¿çã¯ãäœããªãããã¯ãŸãã§ãã
ãã®åé¡ã¯ãŸã æªè§£æ±ºã§ããïŒ ãããããªããçŸåšã®åé¿çã¯äœã§ããïŒ
@types
ããã±ãŒãžãã€ã³ã¹ããŒã«ãããšãã¢ãžã¥ãŒã«ãšããŠã€ã³ããŒããããŠããªãããã±ãŒãžãã°ããŒãã«ãšããŠå©çšã§ããããã«ãªããŸãã
ããšãã°ããããžã§ã¯ãã®ã«ãŒãã«npm install -D @types/underscore
ãããå Žåãã¢ã³ããŒã¹ã³ã¢ããäœãã€ã³ããŒãããªãã¢ãžã¥ãŒã«ãèšè¿°ã§ããŸããã _
ã°ããŒãã«ã¯äœ¿çšå¯èœã«ãªããŸãïŒä»¥äžãåç
§ïŒã
ããã¯ããªããæ±ããŠãããã®ã§ããïŒ
@billti誀解ããŠãããããããŸããããããªãã®äŸã¯ç§ã«ã¯
åçŸã«æäœéå¿ èŠãªãã®ïŒ
js / foo.tsïŒ
// <reference types="js-cookie">
import { Bar } from "./bar";
const Foo = {
set: function() {
Cookies.set("foo", "bar");
},
get: function() {
console.log(Cookies.get("foo"));
}
};
window.onload = function() {
console.log(Cookies);
}
js / bar.ts
const Bar = {
x: 3
};
export { Bar };
package.jsonïŒ
{
"name": "foo",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"private": true,
"devDependencies": {
"@types/js-cookie": "^2.1.0",
"typescript": "^2.7.1"
},
"dependencies": {
"http-server": "^0.11.1"
}
}
tsconfig.json
{
"compilerOptions": {
"module": "system"
},
"files": [
"js/foo.ts"
]
}
ãšã©ãŒã¡ãã»ãŒãžïŒ
js / foo.tsïŒ7,3ïŒïŒãšã©ãŒTS2686ïŒ 'Cookies'ã¯UMDã°ããŒãã«ãåç §ããŠããŸãããçŸåšã®ãã¡ã€ã«ã¯ã¢ãžã¥ãŒã«ã§ãã 代ããã«ã€ã³ããŒããè¿œå ããããšãæ€èšããŠãã ããã
js / foo.tsïŒ10,15ïŒïŒãšã©ãŒTS2686ïŒ 'Cookies'ã¯UMDã°ããŒãã«ãåç §ããŠããŸãããçŸåšã®ãã¡ã€ã«ã¯ã¢ãžã¥ãŒã«ã§ãã 代ããã«ã€ã³ããŒããè¿œå ããããšãæ€èšããŠãã ããã
js / foo.tsïŒ15,14ïŒïŒãšã©ãŒTS2686ïŒ 'Cookies'ã¯UMDã°ããŒãã«ãåç §ããŠããŸãããçŸåšã®ãã¡ã€ã«ã¯ã¢ãžã¥ãŒã«ã§ãã 代ããã«ã€ã³ããŒããè¿œå ããããšãæ€èšããŠãã ããã
ååŸããåäœã¯ãã€ã³ããŒããããã¢ãžã¥ãŒã«ããé©åãªãUMDã¢ãžã¥ãŒã«ïŒããã¯ãCookieãã䜿çšããåäœïŒãšããŠäœæããããããåæã«åæ¹åã§æ©èœãããã¢ãžã¥ãŒã«ïŒlodashã®äœææ¹æ³ïŒãšããŠäœæããããã«ãã£ãŠç°ãªããŸãã ã
ãªããžã§ã¯ããå®è¡æã«ã©ã®ããã«æ©èœãããã説æãã.d.tsãã¡ã€ã«ãæ£ããæžã蟌ã人ã
ã®äžäžèŽãããã³éçºè
ã®ãšã¯ã¹ããªãšã³ã¹ã®äžéæãã¯ãç§ããUMDã°ããŒãã«å¶éã®åé€ãã®æ¹åã«ããªãåŸããŠããçç±ã§ãã --noStrictUMD
ãªããã¢ãŠããããšã --strict
äžã«çœ®ãããšãã§ããŸãã
ç§ãééãããã1ã€ã®ããšã¯ãMonacoã®ã«ã¹ã¿ã AMDããŒããŒãæ±ã£ãŠããããšã§ãã ãããã®ã¢ãžã¥ãŒã«ã¯ã«æ£ããããŒãã«å€±æãã 'å¿ èŠã®ã°ããŒãã«ãšãåç §ããåŸåãããã®ã§ã圌ãã¯ããã¯ããã§æ£ããUMDã¢ãžã¥ãŒã«ã䜿çšããã®ã¯ãšãŠãé£ããã®ã§ããå¿ èŠãã°ããŒãã«ã«ïŒå·šå€§eyeroll INSERTïŒAMDè¡åã®ããã€ãã®ãµãã»ããããµããŒãããŸãããã¹ãã³ãã¢ãã³ã¢ãžã¥ãŒã«ããŒããŒã æçµçã«UMDJSã©ã€ãã©ãªãMonacoããŒããŒã®ã¹ã¯ãªããã¿ã°ã®äžã«é 眮ãããšãã¢ãžã¥ãŒã«ïŒMonaco APIãã€ã³ããŒãããå¿ èŠããããŸãïŒããã°ããŒãã«ã«ã¢ã¯ã»ã¹ããŠãããããTSãæå¥ãèšããŸãã
@RyanCavanaugh
ç§ãééãããã1ã€ã®ããšã¯ãMonacoã®ã«ã¹ã¿ã AMDããŒããŒãæ±ã£ãŠããããšã§ãã ãããã¯AMDã®åäœã®ãµãã»ããããµããŒãããŸãïŒå·šå€§ãªã¢ã€ããŒã«ãæ¿å ¥ããŸãïŒããã°ããŒãã«ãªãrequireããèžã¿ã«ããã®ã§ãé©åãªUMDã¢ãžã¥ãŒã«ã䜿çšããã®ã¯éåžžã«å°é£ã§ãããããã®ã¢ãžã¥ãŒã«ã¯ãrequireããã°ããŒãã«ã«èªèããé©åã«ããŒãã§ããªãããã§ããã¢ãã³ã¢ãžã¥ãŒã«ããŒããŒã
ð
圌ãããããä¿®æ£ããå¯èœæ§ã¯ãããŸããïŒ
ç§ã¯æè¿ãã¢ãžã¥ãŒã«ã®è€éãã®ã³ã¹ãã«ã€ããŠå€ãã®ããšãèããŠããŸããã éåžžã«å€ãã®çžäºäŸåããéšåçã«äºææ§ã®ããããŒããŒããã³ãã©ãŒããã©ã³ã¹ãã€ã©ãŒãããã±ãŒãžãããŒãžã£ãŒãããã³ãã¬ãŒã ã¯ãŒã¯ã¯ãçã«éèŠãªéã®èªå®ã®è€éãã«ãªããŸãã ïŒç§ã¯ããªããäœããªãã€ã³ããŒãå¿ èŠãšããªããšç¢ºä¿¡ããŠããŸãðïŒã
éçºè ãšããŠã5ã6幎åãããæ¡éãã«è€éãªããŒã«ãã§ãŒã³ãåãå ¥ããŸãããè€éãã®äž»ãªåå ã¯ã¢ãžã¥ãŒã«ã§ãã
ãããã®UMDããã±ãŒãžããããããŠã°ããŒãã«ãšããŠããŒããå§ããå Žåãããã¯äœã®ããã«ããã®ã§ããããã
ããã§ã...人ã ã¯ãŸãã«ããããã£ãŠããŸãã ããã¯ã²ã©ãã§ãïŒ
ã€ãŸãããã®Stack Overflow Answerã«ã¯61ðããããéå»å幎éã®ããã±ãŒãžã®99ïŒ ã§ãã¹ãŠã®ééã£ãããšã瀺åããŠããŸãã ïŒèè ã¯ãä»ææäŸããããã£ãŒãããã¯ã®ããã«ãã¢ãžã¥ãŒã«ãUMDäŸåé¢ä¿ã®_ãªãã·ã§ã³_ãšããŠèšåããããã«èŠªåã«æŽæ°ããŸããïŒ
ããã¯ãããããã¹ãŠãé 調ã«é²ãã§ããŠãã°ããŒãã«ã«æ»ãããšãèš±ãããšã¯ã§ããŸããïŒ
ããã§ã...人ã ã¯ãŸãã«ããããã£ãŠããŸãã ããã¯ã²ã©ãã§ãïŒ
åé¡ã¯ãJSã¢ãžã¥ãŒã«ã®æ§æ³ãšå®è£ ãã²ã©ãäžååã§ãããããã°ããŒãã«ã®äœ¿çšã«æ»ãæ¹ãã¯ããã«åªããŠãããç°¡åã§ãããšããããšã§ãã ã¢ãžã¥ãŒã«ãæåããé©åã«èšèšããã³å®è£ ãããŠããå Žå...
ã¢ãžã¥ãŒã«ãšUMDã°ããŒãã«ãçµã¿åãããã®ã¯ãããŸããŸãªããŒããŒãšã®äºææ§ã®ã¬ãã«ãç°ãªãã¢ãžã¥ãŒã«ãšããŠäŸåé¢ä¿ãããŒãããã®ãé¢åã§ãããçŽæ¥ã®äŸåé¢ä¿ã®ãã³ãã«ããµããŒãããŠããªãäžéšã®ããŒããŒã䜿çšããå¿ èŠãããããã§ãã代ããã«ãå®è¡ããåã
ãã®ãæ©èœãã¯ãå®éã«ã¯UMDã¢ãžã¥ãŒã«ã䜿çšããŠããã«ãããããããå ¬åŒã®UMDã¢ãžã¥ãŒã«ãµããŒãã䜿çšããŠããªãããšãæå³ããŸãã .d.tsãã¡ã€ã«ããã°ããŒãã«ãšããŠãšã¯ã¹ããŒããããã¹ãŠãåãšã¯ã¹ããŒããããã®ååã®ç¬èªã®ã¢ãžã¥ãŒã«ãæåã§äœæããŸãã
ããã«é¢ããæŽæ°ã¯ãããŸããïŒ ç§ã¯æ¬åœã«ãªãã·ã§ã³2ãæ©èœããããã§ãïŒ
ããã®UMDã°ããŒãã«ã¯å®éã«ã¯ã°ããŒãã«ã«å©çšå¯èœã§ãããšèšãæ§æãŸãã¯æ§æãèš±å¯ããŸã
ãŸããæãªããã®ã¹ã¿ã€ã«ã®jsã©ã€ãã©ãªãããããåºãŠããã®ãå©ãã«ã¯ãªããŸãã
ããã§ãããããã¹ãŠãæžãçŽãããšã¯åé¡å€ã§ãã ãã£ãããããã®ãäœãã ã
Rollupããããããã¹ãŠæ£ããåŠçããããã«èšå®ãããšãäœæéãç¡é§ã«ãªããŸãã
人ã
ã¯ããšã³ã¿ãŒãã©ã€ãºJavaããç¬ããŸããããã¬ãŒã³Javaã«ã¯å®è¡å¯èœãªãã®ãä»å±ããŠããŸã
1.0ã®ã¢ãžã¥ãŒã«ã·ã¹ãã ã å®ç§ã§ã¯ãããŸããã§ããããå®å
šãªæ··ä¹±ã§ã¯ãããŸããã§ããã
ãUMDã¹ã¿ã€ã«ã®ã°ããŒãã«ãèš±å¯ããããšããã®ã¯ééããªããªãã·ã§ã³ã§ãã
2018幎4æ2æ¥æææ¥åå1æ40åKagamiSascha Rosylight <
[email protected]>æžã蟌ã¿ïŒ
ç§ã¯æ¬¡ã®åé¡ãåé¿ããå¿ èŠããããŸããïŒ
/ *ã¢ãžã¥ãŒã«ïŒes2015 * /
// js-yamlã¯UMDããµããŒãããŸãããES2015ã¢ãžã¥ãŒã«ã¯ãµããŒãããŸããïŒimport * as _jsyaml from "js-yaml"; declare var jsyamlïŒtypeof _jsyaml; jsyaml.safeLoadïŒ ""ïŒ;â
ããªããã³ã¡ã³ãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/Microsoft/TypeScript/issues/10178#issuecomment-377885832 ã
ãŸãã¯ã¹ã¬ããããã¥ãŒãããŸã
https://github.com/notifications/unsubscribe-auth/AA50ljAD33sr09EGFVAsURbu1x75X-lOks5tkeQCgaJpZM4Jd8jX
ã>>
ãããšã«ãžã§ã€ã¹
åæ¢ãªè ã¯æã®äžã«ããã®ã§ãæåãªè ã¯å°çãåãç¶ãã§ãããã
Angularãããžã§ã¯ãã§three.jsã䜿çšããŠããŸãã ãšããŠã€ã³ããŒãããŸã
import * as THREE from "three";
import {Vector3} from "three";
ãæåŸ
ã©ããã«æ©èœããŸãã
three
ããã³@types/three
npmããã±ãŒãžãã€ã³ã¹ããŒã«ãããŠãããšããã¹ãŠãæ£åžžã«æ©èœããŸãã å
éšçã«ã¯ãããã¯three/build/three.module.js
ã䜿çšããŠãããšæããŸãã @types/three/index.d.ts
ãã¡ã€ã«ã¯ãè¡šèšexport as namespace THREE
䜿çšããŸããããã¯ãç§ãå®å
šã«æºè¶³ããŠããããã§ã¯ãããŸããããæ©èœããŸãã
ãã®ç¹å®ã®ã±ãŒã¹ã§ã¯ãåé¡ã¯OrbitControls.js
ãšåŒã°ããthree.jsã·ã¹ãã ã«å¥ã®é¢é£ãã¡ã€ã«ãããããšã§ãïŒããã«ãããåºæ¬çã«æãŸãã¯ããŠã¹ã§3Dç»åãå転ãããããšãã§ããŸãïŒã åé¡ã¯ããã®é¢æ°ãåå
¬åŒã«three.jsãã£ã¹ããªãã¥ãŒã·ã§ã³ã®äžéšã§ããã«ããããããã examples
ããªãŒã«ãããã¬ãŒã³ãªå€ãJSãã¡ã€ã«ã§ããã THREE
ããããã£ã«çŽæ¥é
眮ãããããšã§ãããŠã£ã³ããŠã®ããããŠwindow.THREE
ååšãããšäºæ³ãããä»ã®APIãçŽæ¥äœ¿çšããŸãã ãããã£ãŠããã¡ã€ã«ããå¿
èŠããšããŠã
require("three/examples/js/controls/OrbitControls.js");
èªåèªèº«ãé
眮ãããã䜿çšãã3ã€ã®ã·ã¹ãã ã®ä»ã®éšåã«ã¢ã¯ã»ã¹ãããããããã®window.THREE
ãèŠã€ãããŸããã Angular scripts
ããããã£ã䜿çšããŠã©ã€ãã©ãªå
šäœãangular.json
ïŒæãªããã®<script>
ã¿ã°ãšã»ãŒåçïŒã«çŽæ¥å«ããããšãã§ããŸãããééãããªããã°ç§ã¯ã©ã€ãã©ãªã2åããŒãããŸãã
ãããé¿ããããã«ãç§ã¯import * as THREE from "three";
ã¹ããŒãã¡ã³ããåé€ããŸããããããŠãããããã¯ãŸã foo: THREE.Vector3
ãããªã¿ã€ãã解決ã§ããŸãããæªåé«ãnew THREE.Vector3()
ãããªåç
§ã§çªæ¯ããŸã
ãTHREEãã¯UMDã°ããŒãã«ãæããŸãããçŸåšã®ãã¡ã€ã«ã¯ã¢ãžã¥ãŒã«ã§ãã 代ããã«ã€ã³ããŒããè¿œå ããããšãæ€èšããŠãã ããã [2686]
ãã®æç¹ã§ã OrbitControls.js
ãã¡ã€ã«ãååŸããŠãES6-ifyãŸãã¯TS-ifyããããã¯ãã®äž¡æ¹ãå®è¡ããå¿
èŠããããšèããŠããŸããããã¯ãä»ã®1人以äžããã§ã«è¡ã£ãŠããããã§ãã `orbit-controls-es6ã®ãããªåœ¢ãªã®ã§ãä»ã®äººã®æã«èªåã®äººçããã®ããã«çœ®ãã®ã¯å«ãã§ãããç§ã¯èªåã®äººçãåçŽåããŠããã䜿ãã¹ããããããŸããã
åç¡é¢ä¿ãªããšã«ã1ã€ã®å¥åŠãªç¹ã¯ãã³ãŒãèªäœãthree
ã¢ãžã¥ãŒã«èªäœã«ãªãå Žåã§ãã @types/three
ãOrbitControls
åãå®çŸ©ããããšã§ãã ãã ãã OrbitControls
ãšããã¯ã©ã¹ãå®çŸ©ãããã¹ãŠã®åãäœãã«é¢é£ä»ããæ¹æ³ãããããŸãããäžèšã®orbit-controls-es6
ã®ããã©ã«ãã®ãšã¯ã¹ããŒãã宣èšããããšæããŸãããã®ã¿ã€ãã§ããããã®æ¹æ³ã¯ç§ã«ã¯ããããŸããã
ç§ãæçµçã«æãã€ãã解決çã¯ãç§ãæ·±ãæ¥ããããããšã§ããã次ã®ãšããã§ãã
import * as THREE from "three";
Object.defineProperty(window, "THREE", {get() { return THREE; }});
require("three/examples/js/controls/OrbitControls.js");
çç±ã¯å°ãæ··ä¹±ããŠããŸãããæ©èœããŸãã å¿ èŠãªãã¡ã€ã«ã«ã¯æ¬¡ã®ãããªè¡ããããŸã
THREE.OrbitControls = funtion() { };
import * as THREE from "three";
ã¹ããŒãã¡ã³ãã®çµæãšããŠ3ã€ã®ãåå空éãã«å²ãåœãŠãããããã«èŠããŸãããããã¯æ©èœããªãã¯ãã§ãã
@RyanCavanaughããããã£ãŒãããã¯ãïŒ26223ããã³ããŒããããã«æ±ããããŸããã
ç§ã¯ããªã倧ããªTypeScriptã³ãŒãããŒã¹ïŒGoogleã®å
éšmonorepoïŒãç¶æããŠããã人ã
ãäŸåããŠããæ確ã«åæå®ãããã©ã€ãã©ãªãããã€ããããŸãã å
ã
ããŠãŒã¶ãŒã¯ã .d.ts
ãå€éšã¢ãžã¥ãŒã«ã«å€æãããåã¯ã angular
ãªã©ã®ã©ã€ãã©ãªã®ã°ããŒãã«ã¿ã€ãã«äŸåããŠããŸããã 次ã«ãã¢ãžã¥ãŒã«ãšæ瀺çãªã€ã³ããŒãã䜿çšããããã«ã³ãŒãããŒã¹ã移è¡ããŸããã å®éã export as namespace
d UMDã°ããŒãã«ã§ã¯ãåãšå€ã®äž¡æ¹ã®åç
§ã«ã·ã³ãã«ã䜿çšããããã«æ瀺çãªã€ã³ããŒããåžžã«å¿
èŠã§ããã移è¡ãããšãã«æ°ä»ãããšãããããŸããã§ããïŒãã£ãšïŒã
ã€ã³ããŒããããŠããªãã³ãŒãã®äœ¿çšãèš±å¯ããããšã¯ãäžè¬çã«ç§ãã¡ã«ãšã£ãŠåé¡ããããŸãã
ããã¯ãã³ãŒããã°ããŒãã«ãªãããã¯ã°ã©ãŠã³ããã¿ã€ãå®çŸ©ã«äŸåããŠãããããã³ãŒããèªã¿ã«ãããªãããšãæå³ããŸãïŒç¹ã«ãã¬ããã©ãŠã¶ãŒãŸãã¯ã·ã³ãã«ã«ç§»åããªãã³ãŒãã¬ãã¥ãŒã§ïŒã
ã³ãŒãã®äŸåé¢ä¿ãèŠãé ããŸã
ããã¯ãbazelã§å®è£ ããããã¹ãŠã®ã€ã³ããŒãã«å¯ŸããŠæ瀺çãªãã«ãã¬ãã«ã®äŸåé¢ä¿ãå¿ èŠããšããå¶çŽãåé¿ããŸããå¥åãstrictdepsãã§ãã
倧èŠæš¡ãªã³ãŒãããŒã¹ã§ã¯ãã³ãŒãã«æ瀺çãªäŸåé¢ä¿ãå¿
èŠã§ããããããªããšããªããžããªã管çã§ããªããªããŸãã A -> B -> C
ãšã°ããŒãã«åã远跡ããäŸåé¢ä¿ãããå Žåã B
ãC
äŸåããŠãããšããçç±ã ãã§ãã³ãŒãA
ã³ã³ãã€ã«ããã®ã¯ç°¡åã§ãã B
åŸã§ãã®äŸåé¢ä¿ãåé€ãããšã A
å£ããŸããã€ãŸããå€æŽã«ãã£ãŠãªããžããªã«äºæããªãæ³¢åå¹æãçããã³ãŒãã®åé¢ã«éåããŸãã
ããã«ãããã³ãŒãã¯å€ã«1ã€ã®ãã¬ãã£ãã¯ã¹ãæã€ã¢ãžã¥ãŒã«ãäžè²«æ§ãªãã€ã³ããŒããããã®ã¿ã€ããå¥ã®ãã¬ãã£ãã¯ã¹ã§äœ¿çšããŸãïŒç¹ã«ãAngularJSãngãšangularã®å ŽåïŒ
ãã³ããŒãäœæããDefinitelyTypedã®ã³ããŒã«ããexport as namespace
ã¹ããŒãã¡ã³ããåé€ããããšã§ãããåé¿ã§ããŸãããå°ãªããšãç§ãã¡ã«ãšã£ãŠããã®æ©èœã¯ã³ãŒãã®ä¿å®æ§ãšãšã³ãžãã¢ãªã³ã°ã®ç®æšã«åãããã®ã§ãã åé¡ã¯ã°ãŒã°ã«ã®ãããªã¢ãã¬ãã®ç¶æ³ã§ããé¡èã§ãããšæããŸãããäžè¬çã«å°ããªã³ãŒãããŒã¹ã«ãåœãŠã¯ãŸããŸãã
ããªããæçš¿ãããã€ã³ãã¯ãç§ãã¡ã®ç¶æ³ã«ã¯ãŸã£ããéèŠã§ã¯ãããŸããã ç§ãã¡ã¯ãAMDã¢ãžã¥ãŒã«ã䜿çšããŠç¬èªã®ã³ãŒããå®è£ ããUMDã¢ãžã¥ãŒã«ã䜿çšããŠäŸåé¢ä¿ãæäŸããããšãäœåãªããããŠããŸãïŒãã ããJSã¢ãžã¥ãŒã«ã¯ãæŠå¿µãšå®è£ ã®äž¡æ¹ã§ã²ã©ãæ¬ é¥ããããšèŠçŽããŸãïŒã ãã®æ©èœã«ãããç§ãã¡ã®ç掻ãå€§å¹ ã«ç°¡çŽ åããããšãã§ããŸãã
ããããTS3ã䜿çšããã°ããããåé¿ããæ¹æ³ãèŠã€ããããšãã§ããŸããããããåé¿ãããšããŠããå¿ èŠãªå€æŽããã¹ãŠå®äºãããŸã§ã«ã¯å°ãªããšã2幎ããããããããã¯ç§ãã¡ã«ãšã£ãŠéåžžã«äŸ¿å©ãªæ©èœã§ãã
æªè§£æ±ºã®è³ªåïŒããã¹ãŠã®UMDã¢ãžã¥ãŒã«ãžã®ã¢ã¯ã»ã¹ãèš±å¯ãããã®ã°ããŒãã«ãã©ã°ã¯1ã€ã§ååã§ããããããšãã¢ãžã¥ãŒã«ããšã«ãšã©ãŒãå¶åŸ¡ããå¿ èŠããããŸããïŒ
ããã£ã1ã€ã®æãã«â€ïžã«æ祚ããŠãã ãã
ãã¢ãžã¥ãŒã«ããšã®å¶åŸ¡ãå¿
èŠãã«æ祚ð
ãŸãã tsconfig.jsonã®"types"
ãªãã·ã§ã³ã«æ瀺çãªãªã¹ããååšãããããã¢ãžã¥ãŒã«ã§ã®UMDã®äœ¿çšãèš±å¯ãããªããã©ãããæ€èšããŠããŸããã ã¿ã€ããæå³çã«ååšããããšãæå³ããŸãã ïŒæããã«ãã€ã³ããŒããå¿ãããšãããšã©ãŒãæé€ãããã®ã§ã¯ãããŸããïŒã
ãŸãã¯åæ§ã«ã /// <reference types="..." />
æ§é ã䜿çšãããšããã®ããã±ãŒãžã䜿çšãããŠããã¢ãžã¥ãŒã«ã§ãã®ããã±ãŒãžãUMDã§äœ¿çšã§ããããã«ãªããŸãïŒã€ãŸãããã¢ãžã¥ãŒã«ããšã®å¶åŸ¡ãã«ã€ããŠèª¬æããŸãïŒã
@ RyanCavanaugh ïŒ26233ã«å¯ŸåŠããããã®ãã©ã°ããããŸããïŒ
ããããåæ³çã«ç¡å®³ãã§ãããã©ããã¯ããããããŸããã äŸãšããŠ@types/jquery
ã䜿çšããŸãã $
ãšjQuery
ã¯JQueryStatic
ã€ã³ã¿ãŒãã§ãŒã¹ã«ããããããå®æ°ãšããŠãšã¯ã¹ããŒããããŸãã ãã®çµæããã¹ãŠã®ã¢ãžã¥ãŒã«ãã€ã³ããŒããªãã§$
ãšjQuery
ã¢ã¯ã»ã¹ã§ããŸãã ãããç¡å¹ã«ã§ãããšããã®ã§ããã
@RyanCavanaughã¯ããTSã®æŸåºã圱é¿ãåããªããšããæå³ã§ç¡å®³ã§ãã åã©ã€ãã©ãªãã¢ã¯ã»ã¹ã§ãã@types
ãã现ããå¶åŸ¡ãããå Žåã¯åé¡ããããŸããããã«ãããå°ãªããšãã¢ãžã¥ãŒã«ã¹ã³ãŒãã®åã®ããã«èŠãããã®ãã°ããŒãã«åã«å€ãããŸãã ãšãããã圱é¿ãåããŠããªããŠããã¢ã¯ã»ã¹ã®æ¡å€§ãåé¡ã«ãªãå¯èœæ§ããããŸãã
å®éãjQueryã®å Žåãemitã圱é¿ãåããŸãã $()
ã¯ãã€ã³ããŒããªãã®ã¢ãžã¥ãŒã«ã§çºè¡ãããŸãã
ãã¹ãŠã®ã¢ãžã¥ãŒã«ããUMDã°ããŒãã«ãžã®ã¢ã¯ã»ã¹ãèš±å¯ããæ°ãããã©ã°ã®PRãåãå ¥ããŸãã
å®è£ ã«é¢ããŠã¯ãããã¯éåžžã«ç°¡åã§ã...ããããååãä»ããå¿ èŠããããŸãã ç§ãã¡ã¯ææ¡ã¬ãã¥ãŒäŒè°ã§12ã®ã²ã©ãååã蹎ããããããã¹ãŠãå«ã£ãŠããã®ã§ããããããã®ãæãä»ãã®ã¯ããªã次第ã§ãã ååã«ããŠãã ããã
ç§ãã¡ã¯ææ¡ã¬ãã¥ãŒäŒè°ã§åæ°ã®ã²ã©ãååã蹎ããããããã¹ãŠãå«ããŸãã
ããã¯äœã ã£ãïŒ
ã§ãããããããããã®ãæãã€ãã®ã¯ããªã次第ã§ãã
å€åumdUseGlobal
ãäœãã
UMDã°ããŒãã«ã¯éåžžexport as namespace
ãããUMDã°ããŒãã«ãã©ã°ã®ååã«ã¯importAllNamespaces
ããå§ãããŸãã
@RyanCavanaughããŒã ã¯ã¿ã€ãã®åé¡ã«ã€ããŠè©±ãåããŸãããïŒ
@FranklinWhaleã¯ãã
@saschanazãã§ã«ãããå°ããŸããããç§ãèå³ããããŸã... @RyanCavanaughã©ããªã²ã©ãååãè°è«ããããèŠããŠããŸããïŒ
ãã§ãŒã³ã¯ãããªæãã ã£ããšæããŸã
allowUmdGlobalAccessFromModules
-æãæ£ç¢ºã§ããããã£ããé·ãã§ãassumeGlobalUmd
-ããŒãallowModuleUmdGlobals
-ãã°ããŒãã«ã??umdAlwaysGlobal
-ð€¢allowUmdGlobals
-ããããç§ã¯ãã§ã«ã§ããŸããïŒallowUmdGlobalAccess
-ã¢ãžã¥ãŒã«éšåãã¹ãããããŸããããããã誰ãæ°ã«ããŸãããïŒåŒ·å¶ãããå Žåã¯æåŸã®ãã®ãéžæããŸã
ããããšãããããŸããïŒ
ç§ã¯allowUmdGlobalAccessFromModules
ãäžçªå¥œãã§ãããªããªããããã¯é·ãã§ããããã®ç²ŸåºŠãèŠããããããã§ãã ãã¢ãžã¥ãŒã«ããUMDã°ããŒãã«ã«ã¢ã¯ã»ã¹ã§ããããã«ãããªãã·ã§ã³ã¯äœã§ããïŒãã¡ããã allowUmdGlobalAccessFromModules
ã§ãïŒããšæããŸãã
æ¥é èŸãallowãã䜿çšãããšãä»ã®ãªãã·ã§ã³ã®åœåèŠåãšäžèŽããŸããããã¯è¯ãããšã§ãã
ããã«...ã»ãŒåããããé·ãä»ã®ãªãã·ã§ã³ããããŸã:)
allowUmdGlobalAccessFromModules
ïŒ31æå
allowSyntheticDefaultImports
ïŒ28æå
strictPropertyInitialization
ïŒ28æå
suppressExcessPropertyErrors
ïŒ28æå
suppressImplicitAnyIndexErrors
ïŒ30æå
forceConsistentCasingInFileNames
ïŒ32æå
çŸåšã®åé¿çã¯äœã§ããïŒ ç§ã¯éå»1æéã°ãŒã°ã«ãããŠããŠãå®è¡å¯èœãªè§£æ±ºçãèŠã€ããããšãã§ããŸããã
'any'ã«ãã£ã¹ãããããåäœããTypescriptããŒãžã§ã³ã«ããŠã³ã°ã¬ãŒããããããããããŸããããä»ã®ãªãã·ã§ã³ãèŠã€ãããŸããã
ãã®åé¡ãä¿®æ£ããã³ã³ãã€ã©ãã©ã°ãããå®éšçãªãã«ãã¯ã©ããã«ãããŸããïŒ
ïŒã¡ãªã¿ã«ããallowUmdGlobalAccessFromModulesãã¯åªããååã§ãã1æ¥ã«50åå
¥åããããã§ã¯ãããŸãã:-)ïŒ
äžçªäžã®HTMLãã¡ã€ã«ã«éçã«å«ãŸããŠããlodashã䜿çšããŠtsc3.2.2ã䜿çšããŠããŸãã require.jsã§; ææ°ã®DefinitelyTypedããååŸããd.tsã ã³ã³ãã€ã«ã«å€±æãããµã³ãã«ã³ãŒãïŒ
/// <reference path="..." />
class Example<T extends IThingWithTitle<T>> {
public test = (arg : T[]) : void => {
_.sortBy(arg, (el : T) => { return el.title; }); // TS2686: '_' refers to a UMD global, but the current file is a module. Consider adding an import instead.
};
}
export = Example;
ïŒãããžã§ã¯ããéããŸã«ããå¿ èŠããããšèšããªãã§ãã ãããããã€ãã®é¢ã§é ããåã£ãŠããããšã¯ããã£ãŠããŸãïŒ
æŽæ°ïŒïŒïŒ
@Gilead ããã®ã³ã¡ã³ãã®è§£æ±ºçã¯ä»ã®ãšããåé¡ãªãæ©èœããŸãïŒ https ïŒ
ããã«ã€ããŠäœãé²å±ã¯ãããŸããïŒ ãã®åé¡ãçºçããŠãããããäžèšã®åé¿çãæ©èœããªãããã«èŠããå ŽåããããŸãïŒ [email protected]
ïŒã
æåã«ç§ã¯ãããè©ŠããŸããïŒ
import 'firebase';
declare global {
const firebase;
}
ããã«ãããã°ããŒãã«firebase
ã«ã¿ã€ãany
æé»çã«äžããããåå空éïŒåãååïŒãããã«é©çšãããŸãã æåã¯ã firebase
ãã¹ãŠã®ãããã¬ãã«ããŒã«é©åãªããŒã«ããã/ã€ã³ããªã»ã³ã¹ã衚瀺ããããããããã¯æ©èœããŠããããã«èŠããŸããã
ãã ããå®éã«ã¯æ©èœããŸããïŒãã®åŸãã¿ã€ãany
ãšããŠäœ¿çšããããã«åãæ¿ããããããã°ã®å¯èœæ§ããããŸããïŒïŒïŒ
ã ããç§ã¯ããã§è¿°ã¹ãåé¿çãè©ŠããŸãããæåããŸããã§ããïŒä»ã®äººã«ã¯ããŸããããŸãïŒïŒ
import _firebase from 'firebase'; // same with = require('firebase')
declare global {
const firebase: typeof _firebase;
}
=> 'firebase'ã¯ãç¬èªã®ã¿ã€ãã¢ãããŒã·ã§ã³ã§çŽæ¥ãŸãã¯éæ¥çã«åç
§ãããŸãã
ïŒåå空éããšã€ãªã¢ã¹ãããŠããå Žåã§ãïŒïŒ
ç§ãè©ŠããŸãã
import * as _firebase from 'firebase';
declare global {
const firebase: typeof _firebase;
}
=>ã€ã³ããŒããšã€ãªã¢ã¹ã_firebaseãã®åŸªç°å®çŸ©ã
ïŒãããããã®å®çŸ©ã®export = firebase; export as namespace firebase;
ããã§ããïŒïŒ
ãããŠæåŸã«ã import 'firebase'
å®è¡ããã ãã§ã
ãfirebaseãã¯UMDã°ããŒãã«ãæããŸãããçŸåšã®ãã¡ã€ã«ã¯ã¢ãžã¥ãŒã«ã§ãã [2686]
誰ããããã«å¯Ÿãã解決çãæã£ãŠãããªããããã¯éåžžã«ãããããã§ãã ãã以å€ã®å ŽåããããŸã§ã«èšåããããã解決ããããã®ææ¡ã¯ãç§ã«ã¯æ¬åœã«åé¡ãªãããã§ãïŒãã©ã°ãããªãã«ã¹ã©ãã·ã¥åç
§ãtsconfigã®types
ã global
ãŸãã¯external
ãªããžã§ã¯ããæã€ïŒ tsconfigå
ïŒã
@aluanhaddadã®ã³ã¡ã³ãã«ã€ããŠ
ããã¯ãããããã¹ãŠãé 調ã«é²ãã§ããŠãã°ããŒãã«ã«æ»ãããšãèš±ãããšã¯ã§ããŸããïŒ
ç§ã¯ã°ããŒãã«ã«æ»ãããšã¯ããŠããŸãããããã€ãã®å©ç¹ããããããããä»ã®ãã¹ãŠã«ã¢ãžã¥ãŒã«ã䜿çšããªãããã¢ããªãã³ãã«ãšã¯å¥ã«ããã€ãã®éãäŸåé¢ä¿ãããŒãããããšããŠããŸãïŒäŸåé¢ä¿ãé©åã«ãã£ãã·ã¥ã§ããŸãç§ã®ã¢ããªãã³ãã«ã»ã©é »ç¹ã«ã¯æŽæ°ãããªãããã§ãã ãã³ãã«ãµã€ãºãççºããŸããïŒãã³ãã©ãŒã«åãäŸåé¢ä¿ãè€æ°åå«ãŸããŠãããããã³ãŒããåå²ããããšããããŸãïŒãã€ãŸããã¢ããªãŠãŒã¶ãŒã®ããŠã³ããŒããå°ãªããªããŸãã éçºäžã«ãã³ãã«ãåæ§ç¯ããæ¹ãã¯ããã«é«éã§ãã
ããã¯å®éã«è¿œå ããããšã¯éåžžã«ç°¡åãªæ©èœã§ãã ã³ãã¥ããã£ã®ã¡ã³ããŒããããåãäžããã®ã¯çŽ æŽãããããšã§ãã
@RyanCavanaughç§ã¯ããã«èŠãŠãçš®é¡ã®ç§ã¯ãªãã·ã§ã³ãè¿œå ããå¿
èŠããããŸãèãåºãcompiler/types.ts
ãšã§UMDã°ããŒãã«ãã§ãã¯ãå€æŽããcompiler/checker.ts
ããšç§ã¯ç§ã¯ãããè¿œå ããå¿
èŠããããšæãcompiler/commandLineParser.ts
ã...ãããããœãŒã¹ã«ãŸã£ãã粟éããŠããªããããå®äºãããŸã§ã«ããªãã®æéãããããšæããŸãïŒi18nãå£ããã«CLIãã©ã°ã®èª¬æãè¿œå ããæ¹æ³ãªã©ïŒ ã ä»ã®ãšãããç§ã¯ãã§ã«ãœãŒã¹ãç¥ã£ãŠãã誰ãããããåŒãåããã®ãåŸ
ã€ã€ããã§ãã
@simonhaenischã¢ãžã¥ãŒã«ä»¥å€ã®å®£èšãã¡ã€ã«ã§å®£èšã§ããŸãã埪ç°åç
§ãé¿ããããã«ãå¥ã®UMDã¢ãžã¥ãŒã«å®£èšã§åãšã¯ã¹ããŒãã§ããŸãã å
ã®firebase
ã¯åå空éãšããŠå®£èšãããŠããŸããã幞éãªããšã«ããšã©ãŒãçºçãããããšãªãã宣èšãè£åŒ·ããŸãã
// umd.d.ts
import firebase = require("firebase");
export import firebase = firebase;
export as namespace UMD;
// global.d.ts
declare const firebase: typeof UMD.firebase;
æ®å¿µãªããã宣èšããã®ã¯åå空éã§ã¯ãªãå€ã§ããããã let x: firebase.SomeInterface
ãããªããšã¯ã§ããŸãããåå空éã®ãšã€ãªã¢ã¹ãäœæããå¯äžã®æ¹æ³ã¯ãã€ã³ããŒãã宣èšããããšã§ããã declare import firebase = UMD.firebase;
ã¯ã§ããŸããã
åã®ã³ã¡ã³ããšåæ§ã«ãhls.jsïŒUMDïŒãšåç §åãé 延èªã¿èŸŒã¿ããŠããŸãã
hls.d.ts
ïŒ
import * as Hls from 'hls.js';
declare global {
const Hls: typeof Hls;
}
é
延ããŒããããUMDã¢ãžã¥ãŒã«ã䜿çšãã.ts
ãã¡ã€ã«ïŒ
/// <reference path="hls.d.ts" />
// now use it
if(Hls.isSupported()){
...
}
Typescript> = 3.0.1ããã³3.4ââ.1ã§ãã¹ãæžã¿ã
çè«çæ ¹æ ã¯ãåçã¢ãžã¥ãŒã«ã€ã³ããŒãã«å¯Ÿããäžå®å šãªãã©ãŠã¶ãµããŒãã§ãã
@MatthiasHild /// <reference path="hls.d.ts" />
ã³ã¡ã³ããªãã§å®è¡ã§ããŸããïŒ
ç·šéãã¯ããã§ããŸãã宣èšãããã®SOã®è³ªåã«åºã¥ããŠãå¥ã®.ts
ãã¡ã€ã«ãšåãååãæããªãå«ãŸããŠãã.d.ts
ãã¡ã€ã«å
ã«ããéããå¯èœã§ãïŒãããç§ãæ¹ãã€ãããã®ã§ãïŒãããŠãªãç§ãå°ããã®ãïŒã
æãåèã«ãªãã³ã¡ã³ã
ããã«+1ã ç§ã¯ã¡ããã©SystemJSã§Reactã䜿ãããšããŠããŸããããReactã¯ããŸããã³ãã«ãããŠããªããããã¹ã¯ãªããã¿ã°ã§CDNããçŽæ¥ããŒãããŠããã ããªã®ã§ãReact / ReactDOMãªããžã§ã¯ãã¯ã°ããŒãã«ã«å©çšã§ããŸãã
ãã¹ããã©ã¯ãã£ã¹ãšããŠã³ãŒããã¢ãžã¥ãŒã«ãšããŠèšè¿°ããŠããŸãããããã¯ããŒãæã«å®è¡ããã1ã€ã®ã©ã³ã¿ã€ã ã¹ã¯ãªããã«ãã³ãã«ãããŸãïŒããŒã«ã¢ããïŒã
import from
react / react-domãå®è¡ããããŒããŒããå®éã«ã¯ããããã¯ã°ããŒãã«ã§ã¯ãããŸããããšèšãããã«æ§æããã®ã¯é¢åã§ãïŒãããŠåã§ãïŒïŒhttpsïŒ/ã«ããWebPackæ§æã®äŸãšåæ§ïŒ /www.typescriptlang.org/docs/handbook/react-&-webpack.htmlïŒã ã¢ãžã¥ãŒã«ã§ããããã°ããŒãã«ãšããŠå©çšã§ããããã«ããæ¹ãã¯ããã«ç°¡åïŒãã€æ£ç¢ºïŒã§ãã ç§ãè©Šããæé ã¯ãçŽæçã«æããã®ã§ã次ã®ãšããã§ããnpm install --save-dev @types/react @types/react-dom
"jsx": "react", "types": ["react", "react-dom"]
export function MyComponent() { return <div>{"Hello, world"}</div>; }
ReactDOM.render(...)
ãã ããããã«ãããšã©ãŒ
React refers to a UMD global, but the current file is a module. Consider adding an import instead
ãŸãããããããŸãæ©èœããå Žåãããã¯ãã¢ãžã¥ãŒã«ã§ããã³ãŒããè£ ã£ãŠãããã§ãªãããŒããŒ/ãã³ãã©ãŒãæ§æãããããã¯ããã«ç°¡åã§ãã ïŒãŸãã¯ã以äžãå«ããã¡ã€ã«ãè¿œå ããããšã§ãæåŸ ã©ããã®åäœãå®çŸããŸãããã¢ãžã¥ãŒã«ã¯ããšã©ãŒãªãã§ã°ããŒãã«ãšããŠReactïŒReactDOMã䜿çšã§ããŸãããå°ãéã/ããããŒã§ã-ãã£ãšç°¡åãªæ¹æ³ããããããããŸãããéããïŒïŒ