TypeScriptããŒãžã§ã³ïŒæ¯æ©ïŒ2.3.0-dev.20170417ïŒ
ã³ãŒã
function f() {}
äºæ³ãããè¡åïŒ
ãšã©ãŒãªãããŸãã¯--isolatedModules
ãããžã§ã¯ãå
ã®éã¢ãžã¥ãŒã«ãã¡ã€ã«ã«é¢ãããšã©ãŒã¡ãã»ãŒãžã
å®éã®åäœïŒ
src/a.ts(1,1): error TS1208: Cannot compile namespaces when the '--isolatedModules' flag is provided.
ããã¯ã program.ts
verifyCompilerOptions
ãå€éšã¢ãžã¥ãŒã«å®£èšã§ã¯ãªããœãŒã¹ãã¡ã€ã«ãæ¢ããæåã®ãã¡ã€ã«ãäœã§ãã倱æããããã«çºçããŸãã
ãšã©ãŒã¡ãã»ãŒãžã¯ãåå空éã«ã€ããŠã¯èšåããã«ããã®ãšã©ãŒãçºè¡ããæ¬åœã®çç±ãåæ ããããã«ã¢ããã°ã¬ãŒãããå¿
èŠããããŸãã
ãŸãã¯ãã€ã³ããŒãããã«ãã¡ã€ã«ãèš±å¯ãããã®ãšã©ãŒãè¿œå ããåã«å®éã«åå空éãæ¢ãããšãã§ããŸãã
ãšã©ãŒã¡ãã»ãŒãžãããæ確ã«ããå¿
èŠããããŸãã 代ããã«namespaces
ããã¯èšãããšãã§ããnon-module
ã @DanielRosenwasserã®æšå¥šäºé
ïŒ
ãã®ç¶æ³ã§ã¯ãšã©ãŒã¡ãã»ãŒãžã¯è¡šç€ºãããªãã¯ãã§ãã --isolatedModulesãªãã·ã§ã³ã¯ãå éšã¢ãžã¥ãŒã«ã·ã¹ãã ãå®å šã«ãªãã«ããå¿ èŠããããŸããããã§ãtscããã®æ¹æ³ã§ãšã©ãŒã«ãªãå Žåã¯ããªãã·ã§ã³ã¯ãã®åœ¹å²ãæãããŸããã§ããã
ïŒ15839ã§ããã§ãã¯ã®åäœãå€æŽããã€ããã§ããããåŸã§ãã®ãã§ãã¯ã¯ç¡æå³ã§ãããçæ³çãªè§£æ±ºçã¯ãããåé€ããããšã§ããããšã«æ°ä»ããŸããã
Typescriptã¯ã --isolatedModules
ãªã³ã«ããå€éšã¢ãžã¥ãŒã«å
ã§ã®åå空éã®äœ¿çšãåžžã«èš±å¯ããŠããŸããã
export function something() {} // export found, so this module is considered 'external'
namespace ns {} // namespace is still valid in an external module
ãããã£ãŠããã§ãã¯ã¯ãæå¥ãèšãããšã«ãªã£ãŠãããšãã«ããã®ïŒäžèŠç¡å¹ãªïŒã±ãŒã¹ã§ã¯äœãããŠããŸããã ã§ã¯ãããã°ã©ããŒãåå空éã䜿çšããŠããããäœãæªãããšãããŠããªãã®ã«ããªãæå¥ãèšãã®ã§ããããã
@wilonthãã®åé¡ã®çç±ã¯ããšã©ãŒã¡ãã»ãŒãžãééã£ãŠããããã§ããïŒes6ïŒã¢ãžã¥ãŒã«ã®äžéšã§ããå Žåãåå空éã¯å®å šã«åé¡ãããŸããããã¢ãžã¥ãŒã«ä»¥å€ã®ãã¡ã€ã«ã¯ãšã©ãŒã§ããå¿ èŠããããŸãã
@ andy-msãã®ãšã©ãŒããã§ãã¯ããã³ãŒãå
šäœãç¡æå³ã§ãããã³ãŒããããã«è€éã«ããã®ã§ã¯ãªããåé€ããå¿
èŠãããããšãææããããšããŠããŸããã
ç§ã®ãã€ã³ãã¯ã --isolatedModules
ããªã³ã®å Žåããã¹ãŠã®ãã¡ã€ã«ã¯å€éšïŒES6ïŒã¢ãžã¥ãŒã«ã®æéãšèŠãªãããã¹ãã§ãããšããããšã§ãã ãã®æå³ã§ãåå空éã®äœ¿çšã¯åæ³ã§ããå¿
èŠããããŸããçŸåšãES6ã¢ãžã¥ãŒã«å
ã§åå空éã䜿çšããããšã¯å®å
šã«åæ³ã§ãïŒ --isolatedModules
ãªã³ã®å ŽåïŒã
ç§ã®ãã€ã³ãã¯ã-isolatedModulesããªã³ã®å Žåããã¹ãŠã®ãã¡ã€ã«ã¯å€éšïŒES6ïŒã¢ãžã¥ãŒã«ã®æéãšèŠãªãããå¿ èŠããããšããããšã§ãã
ããã§ã®ã»ãã³ãã£ã¯ã¹ã¯ãã¢ãžã¥ãŒã«ãå°ãªããšã1ã€ã®ãããã¬ãã«ã®ã€ã³ããŒããŸãã¯ãšã¯ã¹ããŒããå«ããã¡ã€ã«ã§ãããšããããšã§ãã ã³ã³ãã€ã©ãã©ã®ããã«åŒã³åºããã¯åé¡ã§ã¯ãããŸããã
@mhegazyã¯ãããã®ã«ãŒã«ããŸãã«ããã§ã®åé¡ã®æ ¹æºã§ãã ãã®ã«ãŒã«ã¯ãã€ã³ããŒããŸãã¯ãšã¯ã¹ããŒããããŠããªããã¡ã€ã«ãã¬ã¬ã·ãŒå
éšã¢ãžã¥ãŒã«ã·ã¹ãã ã®äžéšãšããŠäžåœã«æ±ãããã --isolatedModules
ã¯ãã¡ã€ã«ãæåŠããŸãã
ã«ãŒã«ãå€æŽãããšå€ãã®åé¡ãçºçããå¯èœæ§ããããããã«ãŒã«ãå€æŽããªãã§ãã ããããã ãããã®ãšã©ãŒã¡ãã»ãŒãžãåé€ããã ãã§ãçŸåšã®åé¡ãéåžžã«ç°¡åã«è§£æ±ºã§ããŸãã
ãã®ãåå空éãã³ã³ãã€ã«ã§ããŸããããšãããšã©ãŒã¡ãã»ãŒãžãåé€ããããšæ³åããŠã¿ãŸããããäœãåé¡ã«ãªãå¯èœæ§ããããŸããïŒ Typescriptã³ã³ãã€ã©èªäœã®ãããªå
éšã¢ãžã¥ãŒã«ã䜿çšããã³ãŒãããŒã¹ã¯ã©ãã§ããïŒ --isolatedModules
ãªã³ã«ãããšãã¬ããŒãžã³ãŒãã«ã³ã³ãã€ã«ããããŠãŒã¶ãŒãæ··ä¹±ãããŸããïŒ ããããããã§ã¯ãããŸããã --isolatedModules
ããã¡ã€ã«éã®ãªã³ã¯ãå£ãããããæªå®çŸ©ã®ã·ã³ãã«ã«é¢ããTypescriptãšã©ãŒã¡ãã»ãŒãžãå€æ°è¡šç€ºãããŸãã
ãã®ãšã©ãŒã¡ãã»ãŒãžãåé€ããããšã®æ¬ ç¹ãèŠã€ããããšãã§ããŸããïŒ ã§ããŸããã§ããã äœæ¥ããŒãã§ïŒè¡ãåé€ããã ãïŒãæ¬ ç¹ããªãæãç°¡åãªãœãªã¥ãŒã·ã§ã³ãéžæããªãã®ã¯ãªãã§ããïŒ
--isolatedModulesããªã³ã«ãããšãã¬ããŒãžã³ãŒãã«ã³ã³ãã€ã«ããããŠãŒã¶ãŒãæ··ä¹±ãããŸããïŒ ããããããŸãã
ã¯ãããããªããŸãã
--isolatedModules
ãã©ã°ã®ãã€ã³ãã¯ãããã°ã©ã ãåäžãã¡ã€ã«ã®ãã©ã³ã¹ãã€ã«ã«ãã£ãŠæ£åžžã«ã³ã³ãã€ã«ã§ããããšãæ€èšŒããããšã§ãã
TypeScriptã³ãŒãããŒã¹ã¯ãåäžãã¡ã€ã«ã®ãã©ã³ã¹ãã€ã«ã§ã¯æ£åžžã«ã³ã³ãã€ã«
file1
namespace ts {
export var x = 10;
}
file2
namespace ts {
var y = x; // transpiles to ts.x during whole-program compilation
}
file2ãåäžãã¡ã€ã«ã§ãã©ã³ã¹ãã€ã«ãããšãå£ããŠããŸããŸãã
ç§ã®æªããç§ã¯ç§ã®ãã¹ããå°ç¡ãã«ããŸããã ç§ã¯ããã«ç§ã®ææ¡ãæ€åããŸãã æãåºãããŠãããŠããããšã@RyanCavanaugh ã
ãããã£ãŠã解決çã¯æ¬¡ã®ããã«ãªããŸãããã®ãšã©ãŒã¡ãã»ãŒãžãã¹ããŒããåã«ãå®éã®åå空éã®äœ¿çšç¶æ³ãæ€åºããŸãïŒã€ãŸãã@ andy-msãææ¡ããã代æ¿ããœãªã¥ãŒã·ã§ã³ïŒã ãã®å Žåã®ãšã©ãŒã¡ãã»ãŒãžã¯å®å
šã«ééã£ãŠãããããããã¹ããå¥ã®ãã®ã«å€æŽããããšã¯ã§ããŸããã
ç§ã¯PRããããã®ã§ãããããããã¹ãŠã®ã§ããããåãåºããåŸã§ããããã§ä¿¡é Œã§ããŸããïŒ
A global file cannot be compiled using '--isolatedModules'. Ensure your file contains imports, exports, or an 'export {}' statement.
file2ãåäžãã¡ã€ã«ã§ãã©ã³ã¹ãã€ã«ãããšãå£ããŠããŸããŸãã
ãã¯ããã³ã·ãŒã§ç³ãèš³ãããŸããããã¢ãžã¥ãŒã«ãã¿ãŒã²ããã«ããå Žåãããã¯'x' is not defined
ãããªãã®ã§å€±æããã¯ãã§ããïŒ ãã®å Žåã¯ãäºçŽ°ãªããšãšç§ã«ã¯äœã®éãããããŸããã
file1
var x = 10;
file2
var y = x;
ããã¯ãã¢ãžã¥ãŒã«ã§ã¯ãªããé£çµ/ã°ããŒãã«ã«è©äŸ¡ãããå Žåã«ãæ©èœããŸãã namespaces
ãšã¯äœã®é¢ä¿ããããŸããã
åºæ¬çã«ãtypescriptã¯ã module
ã³ã³ãã€ã©ãªãã·ã§ã³ãããã§ã«ç¥ã£ãŠããã¯ããªã®ã«ã import
ãŸãã¯export
ãªããã¡ã€ã«ãã¢ãžã¥ãŒã«ã§ã¯ãªããšããããæšæž¬ããã®ã¯ãªãã§ããïŒ ããšãã°ãTypescriptèªäœã¯module
ãèšå®ããã«ã³ã³ãã€ã«ããããããããã©ã«ãã®none
ã䜿çšããŠãããããã³ã³ãã€ã©ã¯é£çµ/ã°ããŒãã«è©äŸ¡ãæ³å®ã§ããŸãã
--module <something>
ã䜿çšããä»ã®ãã¡ã€ã«ïŒåå空éèªäœãå«ãïŒããã€ã³ããŒããããŠããªã宣èšã䜿çšããå Žåãtypescriptã¯--isolatedModules
åã«ãæªå®çŸ©ãã§å€±æãã export {}
åŸã«åãããã«å€±æããŸãã
ãªãããã®çç±ã§import
/ export
ã--module none --isolatedModules
ãšäžç·ã«äœ¿çšã§ããããšã«æ°ã¥ããŸããããããã¯ããªãçŽããããããããããã°ã§ããïŒ
ãšã³ããŠãŒã¶ãŒãšããŠã®@DanielRosenwasser ïŒãã°ããŒãã«ãã¡ã€ã«ããšã¯ã©ãããæå³ã§ããïŒ ã§ãã¬ã€ãã³ã¹ã¯å¥œãã§ãã ããããããimportãŸãã¯exportã¹ããŒãã¡ã³ãã®ãªããã¡ã€ã«ã¯ã¢ãžã¥ãŒã«ã§ã¯ãªããã-isolatedModulesãã䜿çšããŠã³ã³ãã€ã«ããããšã¯ã§ããŸããããã®ãã¡ã€ã«ã®å¯äœçšã®ã¿ãè©äŸ¡ãããå Žåã¯ããexport {}ãã¹ããŒãã¡ã³ããè¿œå ããŠãã ãããã -ããã«ããèšèªã¯ããŸããšã©ãŒã¡ãã»ãŒãžã§ã¯ãªãããã§ãã-yã
åçŽãªjsãããžã§ã¯ãã§ãåããšã©ãŒãçºçããŸãã 以äžã®ãµã³ãã«jsãããžã§ã¯ããäœæããŸãããããã±ãŒãžãšã¹ã¯ãªãããã¡ã€ã«ã®å 容ã§ãã ãã®åé¡ã解決ããã«ã¯ã©ãããã°ããã§ããïŒ
Package.json
{{
"plnkr"ïŒ{
ãã©ã³ã¿ã€ã ãïŒãã·ã¹ãã ã
}
}
lib / script.js
//
//ãã©ãã¯ãžã£ãã¯
//ãã£ãŒã©ãžã¯ããŒã«
//
card1 = "ã¹ããŒãã®ãšãŒã¹"ã
card2 = "ããŒãã®10";
console.logïŒ 'ãã©ãã¯ãžã£ãã¯ãžããããïŒ'ïŒ;
console.logïŒ "ããªãã¯é
ãããŸãïŒ"ïŒ;
conosle.logïŒ "" + card1ïŒ;
console.logïŒ "" + card2ïŒ;
ããã«é¢ããæŽæ°ã¯ãããŸããïŒ
ç§ã¯ãã°ãã°å°ããªãã¹ãã§ãããããŠããããšã«æ°ã¥ããŸãã
describe('jest', () => {
it('finds this test', () => {
expect(true).toBeTruthy();
});
it('parses this typescript', () => {
const actual: number = 0;
const expected: number = 0;
expect(actual).toEqual(expected);
});
});
export {
// Use an empty export to please Babel's single file emit.
// https://github.com/Microsoft/TypeScript/issues/15230
}
ã€ã³ããŒã/ãšã¯ã¹ããŒãã¹ããŒãã¡ã³ããå«ãŸããŠãããã©ããã«é¢ä¿ãªããTypeScriptããã¹ãŠã®.tsãã¡ã€ã«ãES6ã¢ãžã¥ãŒã«ãšèŠãªããªãã·ã§ã³ãæ¬åœã«å¿
èŠã§ãã ç§ã¯åœåã --isolatedModules
ãªãã·ã§ã³ããã®ãªãã·ã§ã³ã§ãããšæ³å®ããŠããŸããããã€ã³ããŒã/ãšã¯ã¹ããŒãã®ãªããã¡ã€ã«ã§ãã®éåžžã«çŽãããããšã©ãŒãçºçããŸãã ïŒåå空éããšã©ãŒã¡ãã»ãŒãžãæå³ããããšããŸã ç解ããŠããŸããããã®æ©èœã䜿çšããŠãããšã¯æããŸãããïŒãã®èšå®ãå¿
èŠãªçç±ã¯ã誀ã£ãŠåç
§ããããã«TypeScriptã§ããã€ãã®åé¡ãæ€åºãããªãã£ãããã§ãããã¡ã€ã«ãçžäºã«åç
§ã§ããªãnode / parcel / webpackã䜿çšããŠããã«ããããããããã.tsãã¡ã€ã«ããå¥ã®.tsãã¡ã€ã«ã®ãããã¬ãã«å€æ°ïŒã©ã¡ãã«ãã€ã³ããŒã/ãšã¯ã¹ããŒãã¹ããŒãã¡ã³ãããªãã£ããããTypeScriptã¯ããããES6ã¢ãžã¥ãŒã«ãšããŠæ±ããŸããã§ããïŒãã®ãããªãšã¯ã¹ããŒããããŠããªãå€æ°ã
ããçš®ã®é¢é£ããç ©ããããçŽãããšããŠãç§ã¯ããã«è¡ãçããŸããã 以äžã®ã³ã¡ã³ãã¯ãcreate-react-appãšTypeScriptã䜿çšããŠãã®ãšã©ãŒã«ã€ããŠæ€çŽ¢ããŠããä»ã®VSCodeãŠãŒã¶ãŒãæ¯æŽããããã®ãã®ã§ãã
create-react-app 2.xãšTypeScriptã䜿çšããŠãããã·ãsetupProxy.js
ãšããååã®ãã¡ã€ã«ãè¿œå ããŸãã
const proxy = require('http-proxy-middleware');
module.exports = function(app) { /* ... */ };
react-scripts
ã¯ãtsãã©ã³ã¹ãã€ã«ããã»ã¹ã®å€éšã§ãã®ãã¡ã€ã«ãèªã¿åãããããã¬ãŒã³ãªjsã§ããå¿
èŠããããŸãã
ããã¯ææžåãããŠãããšããã«æ©èœããŸãããåä»ãªå¯äœçšããããŸãã
tsconfig.json
ã«ãã£ãŠçæãããreact-scripts
å
ã®ãã¹ãŠã®ãã¡ã€ã«ãå«ãŸããŠsrc
å«ãã setupProxy.js
ã ãã®çµæãVS Codeãããªã¬ãŒãããŠCannot compile namespaces...
ãšã©ãŒãsetupProxy.js
ã«è¡šç€ºãããã³ãŒãã«èµ€ãæ³¢ç·ã衚瀺ããã[åé¡]ãã€ã³ã«å«ãŸããŸãã ç§ã®ã»ããã¢ããã§ã¯ããã¡ã€ã«ãšãã®ãã¹ãŠã®ç¥å
ãã©ã«ããŒãèµ€ã§åŒ·èª¿è¡šç€ºãããŸãã
解決çïŒ tsconfig.jsonã®setupProxy.js
ãã¡ã€ã«ãé€å€ããŠãVSCodeãšã©ãŒã¡ãã»ãŒãžãæå¶ããŸãã
{
// ...
"exclude": ["src/setupProxy.js"]
}
react-scripts
ã¯isolatedModules: true
react-scripts
匷å¶ããŸããã exclude
ãäžæžãããããã«ã¯èŠããŸããã
å¥ã®æ¹æ³ïŒååä»ããšã¯ã¹ããŒãã `setupProxy.jsã«è¿œå ããŸãïŒ
export const _ = '';
ãããã¬ãã«ã®ãšã¯ã¹ããŒãã§ã-isolatedModulesã§æå¹ã«ãªããŸããã
copliationã«å«ããã¹ãã§ã¯ãªããã¡ã€ã«ïŒgulp.jsãªã©ïŒããããããéçºè ã¯ãã®ã¡ãã»ãŒãžãåãåãããšããããããŸãã
泚æ-create-react-appã䜿çšããŠããŠãç§ãšåãããã«ãã®åé¡ãçºçããå Žåã¯ãtsconfig.jsonãã¡ã€ã«ã«å€æŽãå ããããšã§ãããåé¿ã§ããŸããã
"isolatedModules": true,
ã«
"isolatedModules": false,
@UncleFifiãããŠããšã©ãŒã¯ã¿ã€ããã§ãã¯ããbabelã¿ã€ãã¹ã¯ãªããå€æã«ç§»ããŸããæåã®èŠåãåç §ããŠãã ããã
@jtbennett export {};
ã§ã¯äœããšã¯ã¹ããŒãã§ããŸãã- export { name, localName as exportName };
çž®é圢åŒ
@UncleFifiãããŠããšã©ãŒã¯ã¿ã€ããã§ãã¯ããbabelã¿ã€ãã¹ã¯ãªããå€æã«ç§»ããŸããæåã®èŠåãåç §ããŠãã ããã
å®éã«åå空éã䜿çšããŠããå Žåã®ã¿ã ãã®åé¡ã¯äž»ã«ãåå空éã䜿çšããŠããããã€ã³ããŒã/ãšã¯ã¹ããŒããå«ãæ£åœãªãã¡ã€ã«ãããå Žåã«åå空éã«ã€ããŠäžå¹³ãèšããã®ãšã©ãŒã«é¢ãããã®ã§ãã
å®éã«åå空éã䜿çšããŠããå Žåã®ã¿ã ãã®åé¡ã¯äž»ã«ãåå空éã䜿çšããŠããããã€ã³ããŒã/ãšã¯ã¹ããŒããå«ãæ£åœãªãã¡ã€ã«ãããå Žåã«åå空éã«ã€ããŠäžå¹³ãèšããã®ãšã©ãŒã«é¢ãããã®ã§ãã
ããã§ããããããªãã-ç§ããã®ã¹ã¬ãããèªãã§ãããã°ããçµã¡ãŸããïŒ ãšã¯ãããCRAã§--isolatedModules
ãèšå®ããçç±ã¯ãbabelã¿ã€ãã¹ã¯ãªããã®å¶éãå³å¯ã«ãšãã¥ã¬ãŒãããŠããããã§ãïŒbabelã¯åäžãã¡ã€ã«ã®ãã©ã³ã¹ãã€ã«ã§ãããããïŒããããã£ãŠãå°ãªããšããã®ã¬ãŒããåé€ããŠããããšã«æ³šæããå¿
èŠããããŸããã¬ãŒã«ã
ããã§ããã¡ã€ã«ã®å
é ã«export {};
ãè¿œå ããããã®ãšã©ãŒCannot compile namespaces when --isolatedModules flag is provided
ã®çŸåšã®è§£æ±ºçã¯ãããŸããïŒ
ã¯ããããã§åé¡ãåé¿ã§ããŸãã ïŒå®éã«TypeScript namespace
ã䜿çšããŠããªããšä»®å®ããŸããããã§ãªãå Žåã¯ãå¥ã®ãããããæ£åœãªåé¡ãçºçããŸããïŒ
ãã¡ã€ã«ãã空ã®ããã¡ã€ã«ã§ããããã«ãã®ã¡ãã»ãŒãžã衚瀺ãããŸããïŒã€ãŸãããã¡ã€ã«å šäœãã³ã¡ã³ãã¢ãŠããããŸããïŒã TSãããããã£ããã§ããŠããããã§ããããšã©ãŒã¡ãã»ãŒãžã¯éåžžã«äžéæã§ããïŒããã©ã®CentOS 7ã€ã³ã¹ããŒã«ã§è²ãå£ããŠããŸããããããã¯ããããTSã«çŽæ¥é¢ä¿ã®ãªãwebpackéçºãµãŒããŒãåå ã§ãïŒ
_ç·šéïŒåçŸã§ããŸããã ç§ã¯ééããªã3ã€ã®ãããã¬ãã«ã®ãšã¯ã¹ããŒãã®ã¿ã§æ§æããããã¡ã€ã«ãèŠã€ããŠããŸããããã®ãšã©ãŒãçºçããŸããããã©ããå¥ã®å Žæã§äœãåé¡ãçºçããŸããã_
ãã®ãšã©ãŒã¯ããããã¬ãã«ã®ãšã¯ã¹ããŒãããããã¡ã€ã«ã§çºçããŸããã
// Cannot compile namespaces:
export const foo = 'foo';
// Compiles fine
const foo = 'foo';
export { foo };
@ denis-sokolovæãããªè³ªåïŒåå空éãªã©ããã®ãã¡ã€ã«ã«ä»ã®ãã®ããããŸããïŒ
æåéãexport const
ã ãã®å Žåãç§ã®2çªç®ã®æšæž¬ã¯ãtypescriptãts-loaderãåããwebpackã®ãããªãã®ã§äœ¿çšãããŠããã export
å±éããŠããåã®ãã¹ïŒäŸïŒbabel-loaderïŒã®åŸã«ã®ã¿ã³ã³ãã³ãã衚瀺ãããŠããããšã§ãã
ããåçŸã§ããŸããã 誀èŠå ±ã§ããããªããã @ simonbuchan ã
ãã®ç¹å®ã®ãã¡ã€ã«ã§ãã®ãšã©ãŒãçºçããçç±ãããããŸããã
ä»ã®ãã¡ã€ã«ã¯æ£åžžã«åäœããŸã
CRA TypeScriptã䜿çšããŠããŠã @types
ãªãããã±ãŒãžãã€ã³ããŒãããŠããç¶æ³ã§ãã declare module 'package'
ãè¿œå ããŠç¬èªã®åãæäŸãããã®ã§ããããã®ã¹ããŒãã¡ã³ããã¢ãžã¥ãŒã«ãã¡ã€ã«ã«å
¥ããããšãã§ããŸããã ããã§ã types.ts
ãäœæããŠãããã«declare module
ã¹ããŒãã¡ã³ããé
眮ããŸãã ä»ãç§ã¯ãã®ãšã©ãŒãåãåããŸãã
isolatedModules
ãfalse
ã«äžæžããããšãCRAã¯ãããå
ã«æ»ããŸãã ããã¯è§£æ±ºçã§ã¯ãããŸããã
ç§ã¯è¿œå ãããšexport {}
ã«types.ts
æã€ãã¡ã€ã«declare module
ãç§ã¯å¢åŒ·ã«ç¡å¹ãªã¢ãžã¥ãŒã«åãååŸããŸãisolatedModules
èšå®ã«ããCRAã¯ããã¹ãŠã®ãã¡ã€ã«ã匷å¶çã«ã¢ãžã¥ãŒã«ã«ããŸãã
ãããã£ãŠããããšã©ãŒã解決ããŠå¥ã®ãšã©ãŒã«çå°ããæ»ã£ãŠãããšãã埪ç°ãã¹ããããŸãã ããã¯ã©ã®ããã«è§£æ±ºã§ããŸããïŒ
@Bnayaã¯æšæž¬ã§ãæ©èœãããã¡ã€ã«ã¯importãŸãã¯exportã¹ããŒãã¡ã³ãã䜿çšããŠããŸããïŒ ã³ãŒãã§ã¯require()/module.exports
ãšimport/export
ããããã®ã¿ã䜿çšããŠãã ããã ãã以å€ã®å Žåã¯ããã¹ãŠã®ãã¡ã€ã«ãtsconfigã€ã³ã¯ã«ãŒãã§ã«ããŒãããŠããããšã確èªããŠãã ããïŒè©³çŽ°ã«ã€ããŠã¯ãããã¥ã¡ã³ãã確èªããŠãã ããïŒ
@TomasHubelbauerã¢ãžã¥ãŒã«å®£èšã¯ããšããããã®çç±ãã.d.tsã§ããå¿
èŠããããŸãã
åé€ããèšå®ãCRAã«åè¿œå ããã ãã§ãå
ã«æ»ãããšã¯ã§ããŸããã§ãããããããããisolatedModulesã®æ¹ããã€ããã§ããïŒ
@simonbuchan .d.ts
ãè©ŠããŸãããããããããŸããããŸããã§ãããçç±ãæ£ç¢ºã«å ±åããŸããããããäœã§ãã£ããã¯ããããŸããã ãããŠç¢ºãã«CRAã¯ç§ã®ããã«ãã®èšå®ãæžãçŽããŸããã
@simonbuchanç§ã¯
@simonbuchanããŒãã .d.ts
æ©èœããã®ã§ãããã§ã¢ãžã¥ãŒã«ã宣èšããŠå
¥åã§ããŸãã ç§ãæåã«ãããæŸæ£ããçç±ã¯ããã®ã¢ãžã¥ãŒã«ã§å®£èšãããåã«ã€ããŠã¯ãä»ã®åãåç
§ããå¿
èŠãããããã§ããã .d.ts
ãã¡ã€ã«ã«import
ãå°å
¥ãããšãæ©èœããªããªããŸãã ç§ã¯ããã解決ããæ¹æ³ãç¥ããŸããããããã¯ãã¯ããã®ãšã©ãŒãšã¯äœã®é¢ä¿ããªãTypeScriptã®ç¥èã®æ¬ åŠã§ãã
typescript @ next ïŒhttps://github.com/yang/sandbox-ts-namespaces-errorã®å®å šãªãªããžããªïŒã䜿çšããæå°éã®åçŸã±ãŒã¹ã¯
src / a.js :(泚æãã€ã³ããŒã/ãšã¯ã¹ããŒãããŒã¯ãŒãã¯å¿ èŠãããŸããïŒ
module.exports = "hello"; // you could really put anything here, e.g. console.log('hello');
tsconfig.jsïŒ
{
"compilerOptions": {
"allowJs": true,
"isolatedModules": true,
"noEmit": true,
"strict": true
},
"include": ["src"]
}
ãšã©ãŒïŒ
$ ./node_modules/.bin/tsc
src/a.js:1:1 - error TS1208: Cannot compile namespaces when the '--isolatedModules' flag is provided.
1 module.exports = "hello";
~~~~~~
Found 1 error.
ç§ãæåã«create-react-app --typescript
ãä»ããŠããã«ééããŸãããããã¯ãsetupProxy.jsïŒãŸãã¯setupTests.jsïŒãäœæããããã«æ瀺ããŸãã CRAã¯ãŸãã isolatedModules
ãšallowJs
ãtrueã«èšå®ããŸãã ããã¯ããæ°ããtypescriptããŒãžã§ã³ãŸã§åé¡ã§ã¯ãªãã£ãããã§ãïŒ3.2.xãŸãã¯3.3.xã«ã¢ããããŒãããåŸã§ã®ã¿ãtypescript 3.1.xã§setupProxy.jsã«é¢ãããšã©ãŒã¯èŠãããŸããã§ããïŒã
é€å€ã»ããã«.jsãã¡ã€ã«ãè¿œå ããåé¿çã¯ãtscãå®è¡ããŠãããšãã«æ©èœããŸãããTSèšèªãµãŒãã¹ã®ãšãã£ã¿ãŒã§ãããã®ãã¡ã€ã«ããã®ãšã©ãŒã衚瀺ãããŸãïŒVS CodeãšWebstormã®äž¡æ¹ãè©ŠããŸããïŒã ïŒããã¯ãé€å€ãå°éããªãTSèšèªãµãŒãã¹ã®å¥ã®ããäžè¬çãªåé¡ã®ããã§ããããã®ããã®æ¢åã®åé¡ãèŠã€ããããšãã§ããŸããã§ãããïŒãšãã£ã¿ãŒã§ãã®ãšã©ãŒããã¹ã¯ããããã«ã.d.tsãã¡ã€ã«ãè¿œå ããŸãã* .jsãã¡ã€ã«ã®å Žåã
ããã«ã.jsãã¡ã€ã«ãèŠæ±ãŸãã¯ã€ã³ããŒããããšãé€å€ãç¡å¹ã«ãªããïŒãšãã£ã¿ãŒã®å€éšã§ïŒãšã©ãŒãçºçããŸãã
ïŒcreate-react-appã瀺åãããã®ã«å¯ŸããŠïŒallowJsãç¡å¹ã«ããããšã ããç§ã®ããã«åããŠããããã§ãã
Webã¯ãŒã«ãŒã§ãã®ãšã©ãŒãçºçãç¶ããŸãã
åã ã®ãã¡ã€ã«ãŸãã¯ãã©ã«ããŒãé€å€ããããšããŸããããæ©èœããŸããã
ãã®isolatedModulesèšå®ããªãŒããŒã©ã€ãããæ¹æ³ã¯ãããŸãããCRAã¯tsconfig.jsonãæžãçŽãç¶ããŸãã
ä»ã«äœãææ¡ã¯ãããŸããïŒ
@jamespfarrell export {};
ãã¡ã€ã«ã®ã©ããã«çœ®ããŸãã
@Macilã¢ããã€ã¹ããããšã
ãã®ãšã©ãŒãçºçããŸãïŒ
ã€ã³ããŒãã®è©Šè¡ãšã©ãŒïŒ './ workers / HeartBeat.worker.js'ã«ããã©ã«ãã®ãšã¯ã¹ããŒããå«ãŸããŠããŸããïŒ 'HeartBeatWorker'ãšããŠã€ã³ããŒããããŸããïŒã
è¿œå ããå ŽåïŒ
export default {};
ç§ã¯åŸãïŒ
Uncaught TypeErrorïŒ_workers_HeartBeat_worker_js__WEBPACK_IMPORTED_MODULE_2 __ãdefaultã¯ã³ã³ã¹ãã©ã¯ã¿ãŒã§ã¯ãããŸãã
ãã¹ãŠã®ãã¡ã€ã«ã§ãã£ãŠãã1ã€ã®ãã¡ã€ã«ã§ã¯ãªãå Žåã§ãããã®ãisolatedModulesãããã€ãã¹ããæ¹æ³ã¯ãããŸãããïŒ
çŸåšçºçããŠãããšã©ãŒã¯ãisolatedModulesèšå®ãšã¯é¢ä¿ãããŸããã IsolatedModulesããªãã«ããŠãããããã®ãšã©ãŒãçºçããŸãã
ã€ã³ããŒãã®è©Šè¡ãšã©ãŒïŒ './ workers / HeartBeat.worker.js'ã«ããã©ã«ãã®ãšã¯ã¹ããŒããå«ãŸããŠããŸããïŒ 'HeartBeatWorker'ãšããŠã€ã³ããŒããããŸããïŒã
ãã®ãšã©ãŒã¯ã©ãã§çºçããŠããŸããïŒ import Foo from './workers/HeartBeat.worker.js';
ããã«ããã¡ã€ã«ããªãããã©ã«ãã®ãšã¯ã¹ããŒããã€ã³ããŒãããããšããŠããããã§ãã ããã©ã«ãã®ãšã¯ã¹ããŒããã€ã³ããŒãããããªãå Žåã¯ãã€ã³ããŒãè¡ãimport './workers/HeartBeat.worker.js';
å€æŽããŸãã
ããã§ãã @ Macilã¯å¥ã®ãã®
_ä»ã®èª°ããåãåé¡ãæ±ããŠããå¯èœæ§ããããŸãïŒ_ã³ã³ãã³ãã®ãªããã¬ãŒã¹ãã«ããŒãšããŠæ®ããããã€ãã®ãã¡ã€ã«ã§åããšã©ãŒã衚瀺ãããŸããããä»ã®ãã¡ã€ã«ã«ã€ã³ããŒãããŠããŸãã å¥ã®ã³ã³ããŒãã³ããã¡ã€ã«ã«ã€ã³ããŒãããã空ã®styles.jsãã¡ã€ã«ããããŸããã
è¿œå ããã ãã§ã
ä»ã®èª°ãããã®ç¹å®ã®ééããç¯ããŠããå Žåã誀ã£ãŠ.d.ts
ã§ã¯ãªã.ts
æ¥å°ŸèŸãä»ããã¢ãžã¥ãŒã«å®çŸ©ã§ãã®ãšã©ãŒãçºçããŸããã ä¿®æ£åŸã«ãµãŒããŒãåèµ·åããå¿
èŠããããŸãã
åããšã©ãŒã ç§ã¯CRAã䜿çšããŠããŸã
CRAã§ãã®åé¡ã«çŽé¢ããŸããã ãã¡ã€ã«ããäœãããšã¯ã¹ããŒãããã®ãå¿ããŠããŸããã
ãããžã§ã¯ãã®ã«ãŒããã©ã«ããŒã«.js
ãã¡ã€ã«ããããtsconfig.jsonãã¡ã€ã«ã§ãããæ§æããããããã®ãšã©ãŒãçºçããŸããã
"compilerOptions": {
....
},
"include": ["src"],
ç§ã¯ããã®ããã«ãããåãæ¿ããå¿ èŠããããŸããïŒ
"compilerOptions": {
....
},
"include": ["src/*"],
ããã§ä¿®æ£ãããŸããããçç±ãããããŸããã誰ãã説æããŠããããŸããïŒ ç§ã®ç解ã§ã¯ã src
ãå«ãããšãã«ãŒããã¡ã€ã«ãšå
åŒãã©ã«ããŒãåé€ãããŸãã
@thitempleã©ããã®èšäºãããã®/ *ã¹ãããããååŸããŸãããïŒ webpackã®ããã¥ã¢ã«ã«ã¯ãæåã®ãã®ãæ£ãããã®ã§ããããšã瀺ãããŠããããã§ãã ç§ã¯åæ§ã®åé¡ã蚺æããŠããŠãããªãã®æçš¿ã«åºããããŸããã
@ vort3xxxç§ã¯ããŸããã§ããã ç§ã¯ãã®èšäºãèŠãhttps://github.com/microsoft/TypeScript/issues/15230#issuecomment @DaviSpindolaãã-479730947ããããããè©ŠããŠã¿ãŸããã ããã§ãã
@ vort3xxxç§ã¯ããŸããã§ããã @DaviSpindolaããã®ãã®æçš¿ïŒ15230ïŒã³ã¡ã³ãïŒãèŠãŠãè©ŠããŠã¿ãŸããã ããã§ãã
åãåé¡ãåã解決çã TS3.5.2ã
@ThomasdenH
@simonbuchan
.d.ts
ãè©ŠããŸãããããããããŸããããŸããã§ãããçç±ãæ£ç¢ºã«å ±åããŸããããããäœã§ãã£ããã¯ããããŸããã ãããŠç¢ºãã«CRAã¯ç§ã®ããã«ãã®èšå®ãæžãçŽããŸããã
ãŸã£ããåãåé¡ã«ééããŸããã ããã解決ããæ¹æ³ãç解ããããšããããŸããïŒ create reactã¢ããªå
ã§.ts
ãŸãã¯.d.ts
宣èšãã¡ã€ã«ãå®çŸ©ãããšããšã©ãŒAll files must be modules when the '--isolatedModules
ãã©ã°ãæäŸãããŠè¿ãããŸãã ãã©ã°ãfalse
èšå®ãããã isolatedModules
ããããã£ãåé€ãããšãreactã¢ããªã®äœæãéå§ãããšãå®å
šã«true
ã«ãªã»ãããããŸãã
宣èšãã¡ã€ã«ã®æåŸã«export {}
ãè¿œå ãããšããšã©ãŒInvalid module name in augmentation. Module '...' resolves to an untyped module at '...'
ãŸãã
誰ãå©ããŠãã ããã ã«ã¹ã¿ã 宣èšãã¡ã€ã«ãcreatereactã¢ããªãããžã§ã¯ãã«è¿œå ããã«ã¯ã©ãããã°ããã§ããïŒ
ä»ã®èª°ããåãåé¡ãæ±ããŠãããã©ãããç解ããã ãã§ãã create reactã¢ããªã䜿çšããå Žåã¯ããœãŒã¹ãã©ã«ããŒã®react-app-env.d.ts
ãã¡ã€ã«ã«å®£èšã¿ã€ããè¿œå ããã ãã§ãã
æãåèã«ãªãã³ã¡ã³ã
A global file cannot be compiled using '--isolatedModules'. Ensure your file contains imports, exports, or an 'export {}' statement.