๋๋ ์ด๊ฒ์ ์๋ํ๋ค:
import React, {Component} from 'react';
ํ์ง๋ง ์ด ์ ํจํ ES6 ๋์์ ์ง์ํ๊ธฐ ์ํด react.d.ts
๋ฅผ ์ ์ํ๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์ปดํ์ผ๋ฌ๋ ๋ค์ ์ค๋ฅ๋ฅผ ์์ฑํฉ๋๋ค.
error TS1192: Module '"react"' has no default export.
export default react = React;
์ด ์๋ํ ์ ์์ต๋๋ค.
๋๋ ๋น์ ์ด ์ํ๋ ๊ฒ์ด import * as React, {Component} from 'react';
๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๊ทธ๋์ ์ ๋ ์ต๊ทผ์ ES6์ ๊ฝค ๋ง์ ์๊ฐ์ ๋ณด๋๊ณ ํ์ฌ import React from 'react';
๋ ๊ธฐ์ ์ ์ผ๋ก ์ ํจํ ๋์์ด ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. React๋ ES6 ํด๋์ค ๋ชจ๋์ ์ฌ์ฉํ์ง ์์ผ๋ฏ๋ก ๊ธฐ๋ณธ ๋ด๋ณด๋ด๊ธฐ๋ฅผ ์ง์ ํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
์ด ๊ตฌ๋ฌธ์ Babel์ ์ฌ์ฉํ ๋ ์๋ํ์ง๋ง ๊ธฐ๋ณธ์ ์ผ๋ก Babel์ด "CommonJS ๋ชจ๋์ ๊ฐ์ ธ์ค๊ธฐ ์ํด ES6 ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ๋ด๋ณด๋ด๊ธฐ๋ modules.export
์ ๋์ผํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ์ ์ ์ผ๋ก Babel์ด๊ณ ์ฌ์์ ๊ด์ ์์ ๋๋ import * as React from 'react';
๊ฐ ์ค์ ๋ก ์ ์ ์ ํจ์ฌ ๊ฐ๊น๋ค๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค(๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅํ TypeScript์ ํจ๊ป ์๋ํฉ๋๋ค).
๊ทธ๋ฌ๋ ์ด๊ฒ์ ์์ ํ Babel์ ๊ฒ์ด์ง ์ฌ์์ ๊ฒ์ด ์๋๋๋ค.
๋์. ๊ทธ๋ฌ๋ babel์ _๋ง์_ ๋งค๋ ฅ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ์ฌ๋๋ค์ ES6 ๋ชจ๋์ด _๋ฐ๋์_ ์๋ํด์ผ ํ๋ ์ฌ๋ฐ๋ฅธ ๋ฐฉ์์ด๋ผ๊ณ ๋ฏฟ์ต๋๋ค.
@vvakame ์ babel ์ ํ ๊ฐ์ ธ์ค๊ธฐ์์ ์ํธ ์ด์ฉ์ฑ์ ์ํํ๊ฒ ๋ง๋ค๊ธฐ ์ํด ๋ช ๊ฐ์ง ์์ ์ ์ํํ์ต๋๋ค. https://github.com/Microsoft/TypeScript/pull/3586
์, PR์ด ์ฃผ๋ก TypeScript์์ ๋ด๋ณด๋ด๋ ๊ฒ์ ๊ดํ ๊ฒ์ด์ง๋ง ์ด ๋ฌธ์ ๋ TypeScript๋ก ๊ฐ์ ธ์ค๋ ๊ฒ์ ๊ดํ ๊ฒ์ ๋๋ค. ๋ค์ ๋งํด, ๊ทธ PR์ ์ด ๋ฌธ์ ์ ๋์์ด ๋์ง ์์ต๋๋ค(๊ทธ๋ฌ๋ TypeScript๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋น๋ํ๋ ๋ฐ๋ ํ์คํ ์ข์ต๋๋ค!).
๋๋ Babel์ด Facebook์ ์ธ์๋๋ฉด์ ์ด ๋ฌธ์ ๊ฐ ๊ณง ์ฌ๋ผ์ง ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๊ณ React๊ฐ ES6 ๋ชจ๋๋ก ๋ค์ ์์ฑ๋๋๋ผ๋ ์ ํ ๋๋ผ์ง ์์ ๊ฒ์ ๋๋ค.
๋๋ ํด๋น ๊ตฌ๋ฌธ์ _์ ๋ง__ ์ฌ์ฉํ๋ ค๋ฉด ์ ์ธ ํ์ผ์ export default React
๋ก ๋ณ๊ฒฝํ ์ ์์ง๋ง ES6์ ๋์์ผ๋ก ํ ๋ค์ Babel์ ์ฌ์ฉํ์ฌ CommonJS๋ก ๋ณํํด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ฐํ์์ ์ ๋๋ก ์๋ํ์ง ์์ต๋๋ค(TypeScript๋ ES6 ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ฌ์ฉํ ๋ ํญ์ moduleName.default
๋ก ๋ณํํฉ๋๋ค.
๋ช
ํํ ํด ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. ๊ฐ๋จํ ๋งํด์ ts export -> babel import
๊ฐ ์๋ํฉ๋๋ค. ์ด์ module.exports aliased to default -> ts import
์์
์ด ํ์ํฉ๋๋ค.
๋๋ ํํฐ์ ์กฐ๊ธ ๋ฆ์์ง๋ง ๋ด๊ฐ ์๋ ๋ฐ์ ๋ฐ๋ฅด๋ฉด ์ด๊ฒ์ TypeScript ํ์ ์๋ชป๋ ์์ ์ฌํญ์ ๋๋ค.
tl;dr: export default
๋ฅผ module.exports =
๋ก ๋ฒ์ญํ ์ ์์ต๋๋ค. ๋์ import ... = require(...)
๋ ๊ฑฐ์ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ญ์์ค :(
ES-6 ๊ธฐ๋ณธ ๋ด๋ณด๋ด๊ธฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฆ์ด 'default' ์ธ ์ผ๋ฐ ๋ด๋ณด๋ด๊ธฐ์ด๊ธฐ ๋๋ฌธ์ CJS์์ ์ด์ ์์ํ๋ ๊ฒ์ exports.default =
์
๋๋ค. ๊ฐ์ ธ์ค๊ธฐ๋ CJS var something = require('something').default
์์ ๋ค์๊ณผ ๊ฐ์ด ํ์๋ฉ๋๋ค. module.exports =
๊ตฌ๋ฌธ์ ๋ชจ๋์ ๋ด๋ณด๋ธ ๊ธฐํธ ์์ฒด์ ๋์ผํ๊ฒ ๋ง๋ค์ด ์ํ ์ข
์์ฑ์ ํด๊ฒฐํ ์ ์๋๋ก ๋ง๋ค๊ธฐ ๋๋ฌธ์ ์ถฉ๋ถํ์ง ์์ต๋๋ค. ์ด๊ฒ์ ES6 ๋ชจ๋์ ์ค๊ณ์ ์๋ฐฐ๋ฉ๋๋ค. IMHO Babel ํ์ ์ด๊ฒ์ผ๋ก ์ฝ๊ฐ ๊ณผ์ฅ๋์์ต๋๋ค :(
@dreampulse ์ด ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ์ํํ๊ณ ์์ต๋๋ค.
import {default as React,Component} from 'react';
๋ถํํ๋ ๋๋ฅผ ์ํด ์๋ํ์ง ์๋ @kataras :
Error:(2, 9) TS2305: Module '"react"' has no exported member 'default'.
์ํธ
import {default as React, Component, PropTypes} from 'react';
tsconfig.json
{
"compileOnSave": true,
"compilerOptions": {
"target": "es6",
"sourceMap": true,
"jsx": "react"
}
}
์๋ํ๋ ๊ฒ์ ๋ ๊ฐ์ง ๊ฐ์ ธ์ค๊ธฐ์ ๋๋ค. ์ฒ๋ผ:
import * as React from "react";
import { Component } from "react";
์ด๋ฌํ ์ข
๋ฅ์ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ํ์ฉํ๋ allowSyntheticDefaultImports
์ปดํ์ผ๋ฌ ์ต์
์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
import React, {Component} from 'react';
@jbrantly ๊ฐ์ฌํฉ๋๋ค. ์ ๋ฑ ๋ง๋ค!!
@ligaz ๊ฐ์ฌํฉ๋๋ค!
์ฐธ๊ณ ๋ก @ligaz ๊ฐ ์ธ๊ธํ ์์ ์ฌํญ์ด ํจ๊ณผ๊ฐ ์๊ธฐ ์ ์ "module": "es2015",
๋ฅผ tsconfig.json
์ ์ถ๊ฐํด์ผ ํ์ต๋๋ค.
import React, {Component, PropTypes} from 'react';
์(๋ฅผ) ์ฌ์ฉํ๊ณ ์๋๋ฐ Cannot resolve symbol PropTypes
์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ํ ํฌ์ธํฐ๊ฐ ์์ต๋๊น?
@kkarmalkar React >=15.5.0์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ React.PropTypes์์ ์๋ก์ด prop-types ํจํค์ง ๋ฐ ์ ์ ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๊ณ ์ถ์ ๊ฒ์ ๋๋ค.
๊ต์ฅํฉ๋๋ค, ๊ฐ์ฌํฉ๋๋ค @corydeppen
๋๋ allowSyntheticDefaultImports๊ฐ ์์ง๋ง ์ป์ ์ ์์ต๋๋ค
import React, {Component} from 'react';
์๋ํ์ง๋ง ์ฌ์ฉ
import React from 'react';
import {Component} from 'react';
์ ์๋ํฉ๋๋ค. ๋ด ๋ชจ๋์ es5๋ก ์ค์ ํ์ต๋๋ค. ๋ธ๋ผ์ฐ์ ์ฉ ์ฝ๋๋ฅผ ์ปดํ์ผํ ๋ es6์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๊น? tsconfig.json์ libs ์์ฑ์ es2015๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
@richtera ๊ด๋ จ ๊ฐ๋ฅ์ฑ: https://github.com/Microsoft/TypeScript/issues/21621
๊ด๋ จ์ด ์์ต๋๋ค, ๊ทธ๋ ์ต๋๋ค. ์ด ์ค๋ ๋์ ๋ฐ๋ฅด๋ฉด ๊ทธ๊ฒ์ด ๋น์ ์๊ฒ ํจ๊ณผ๊ฐ ์๋์ง ๊ถ๊ธํฉ๋๋ค.
tsconfig ์ต์
esModuleInterop: true
์ ์ถ๊ฐํ๋ฉด ๊ธฐ๋ณธ ๊ฐ์ ธ์ค๊ธฐ(์: import React from 'react'
)๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
webpack์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ด ์ค์ ์ผ๋ก babel์ ๋ฒ๋ฆด ์๋ ์์ต๋๋ค.
์ด์ ์๋ํฉ๋๋ค. ๋น์ ์ฌ์ฉํ๋ ํน์ ๋ฒ์ ์ webpack ๋ฐ typescript์ ๊ด๋ จ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค. Babel ์ค์ ์ ๋ถํํ๋ ์ฌ์ ํ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์๋ babel์ ์ฌ์ฉํ๋ ๋ฐ ํ์ํฉ๋๋ค.
"allowSyntheticDefaultImports": ์ฐธ
"module": "es2015
โallowSyntheticDefaultImportsโ๏ผtrue
์ผํ๊ณ ์๋ ....
"module": "es2015 โallowSyntheticDefaultImportsโ๏ผtrue
์ผํ๊ณ ์๋ ....
์ด๊ฒ ํธ๋กค์ด์ผ? :) ๋ง์ง๋ง ์ค์ ๋ฐฉํฅ ๋ฐ์ดํ๊ฐ ์๊ณ true
์์ ์ฝ๋ก ์ด ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์์ผ ํฉ๋๋ค.
"module": "es2015",
"allowSyntheticDefaultImports": true
import { default as ProjectInfoProfile } from './ProjectInfoProfile';
๋๋
'./ProjectInfoProfile'์์ ProjectInfoProfile์ ๊ฐ์ ธ์ต๋๋ค.
์ด ๊ฒฝ์ฐ ์๋ํ ์ ์์ต๋๋ค.
"๋ชจ๋": "commonjs",
"๋์": "es6",
"esModuleInterop": ์ฐธ,
"jsx": "๋ฐ์",
"allowSyntheticDefaultImports": ์ฐธ
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด๋ฌํ ์ข ๋ฅ์ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ํ์ฉํ๋
allowSyntheticDefaultImports
์ปดํ์ผ๋ฌ ์ต์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.