# 18128 ์์
๊ฐ์ฅ ์ ํํ ์ ํ(์ต์์ ์ค๋ฅ ๋ฐ ํธ์ง๊ธฐ ์์ฑ ์ ๊ณต)๊ณผ ๋น ๋ฅธ ์ ํ ๊ฒ์ฌ(์คํํธ๋ผ์ ๋งจ ๋์ any
์) ์ฌ์ด์๋ ํญ์ ๊ธด์ฅ์ด ์์ต๋๋ค.
https://github.com/microsoft/TypeScript/issues/34801 ๊ณผ ๊ฐ์ ๋ฌธ์ ๋ Material-UI๊ฐ ์ฑ๋ฅ์ ํ๋ณตํ๊ธฐ ์ํด ์ ํ์ฑ์ ์ํํ๋ ๊ฒ์ด ๋์์ด ๋ ์ ์์์ ์์ฌํฉ๋๋ค.
๋ด๊ฐ ์ง๊ธ๊น์ง ์กฐ์ฌํ repos์์ ๋ง์ ์์ CSS ์์ฑ ์ด๋ฆ์์ ๋ง์ ์๋ ์ ํ๊ฐ ๋ฐ์ํ๋ ๊ฒ ๊ฐ์ต๋๋ค(https://github.com/mui-org/material-ui/blob/master/packages/ ์ฐธ์กฐ). material-ui-styles/src/withStyles/withStyles.d.ts). ํ์ฑ CSS ์ฌ์ฉ์๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ๋ช ๊ฐ์ง ์์งํ ์ง๋ฌธ์ด ์์ต๋๋ค.
1) ์ ์๋ ค์ง ๊ฐ CSS ์์ฑ์ ๋ํ ์ด๋ฆ๊ณผ ์ ํ์ ๊ฐ๋ ๊ฒ์ด ๋งค์ฐ ๊ฐ์น ์๊ณ ์ฐ๋ฆฌ๊ฐ ํฌ๊ธฐํ ์ ์๋ ๊ฒ์ด ์๋๋ผ๊ณ ๊ฐ์ ํ๋ ๊ฒ์ด ๋ง์ต๋๊น?
2) CSSProperties
์ ํ์ "์์ฌ ์ ํ๊ธฐ ๋ฐ ๋ฏธ๋์ด ์ฟผ๋ฆฌ"๋ฅผ ์ง์ํ๊ธฐ ์ํด ์กด์ฌํ๋ ๊ฒ์ผ๋ก ๋ณด์
๋๋ค. ์ ํ๋ ๋
์์ ๋ฐ๋ฅด๋ฉด ์ถ๊ฐ CSS ์์ฑ์ ์ด๋ฆ์ด ์ง์ ๋ ๊ฐ๋ฐฉ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
a) ์ด ๋ฐฑ ์์ฒด๊ฐ ์ฌ๊ท์ ์
๋๊น, ์๋๋ฉด ์ถ๊ฐ ๋ ์ด์ด๊ฐ ํ๋๋ง ์์ต๋๊น? ์ฆ, width
์์ foo.width
๋๋ foo.bar.width
๋ฑ์ผ๋ก ์ด๋ํฉ๋๊น? ํ ์์ค์ผ ๊ฒฝ์ฐ ์ ํ์ ๋จ์ํํ๋ฉด ๋ก์ปฌ ์ฌํ์ด 4.6์ด์์ 3.6์ด๋ก ๋จ์ถ๋ฉ๋๋ค(์ฆ, ํฐ ์น๋ฆฌ).
b) ์ค์ค๋ก ์ ํ์ ๊ฐ์ง๊ณ ๋์๊ณ BaseCSSProperties[keyof BaseCSSProperties]
๋ณด๋ค ๋ ๋์ ๊ฒ์ ์๊ฐํด๋ผ ์ ์์์ง๋ง - ๋น์ ์ด ์๊ณ ์๋ ๊ฒ์ฒ๋ผ - ๊ทธ๊ฒ์ ๋ณ๋ก ์ ์ฉํ ์ ํ์ด ์๋๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ CSS ์์ฑ์ (๊ธฐํ) CSS ์์ฑ์ ์ ํ์ ๊ฐ์ง ์ ์์ต๋๋ค. ์ด๋ any
๋ณด๋ค ์ฝ๊ฐ ๋ซ์ต๋๋ค.
3)์์ StyleRules
์ด๋ค ์์ฑ์ด์๋ ๊ฒฝ์ฐ, ๋น์ ์ด ์ค ํ๋๋ฅผ ์ป์ CSSProperties
๋๋ () => CSSProperties
์๋ฏธ๊ฐ์๋ (์ด ๋ด๊ฐ ํ๋ฆด "CSSProperties๋ฅผ thunked"ํธ์ถ) - CSSProperties
๊ฒ์ผ๋ฅธ ์ ์์ต๋๋ค. ์์ฑ์ด์๋ ๊ฒฝ์ฐ, ๋น์ ์ด ์ค ํ๋๋ฅผ ์ป์ CreateCSSProperties<Props>
์๋ฏธ๊ฐ์๋ - Props
์ปดํจํ
ํด์ผ ํ ์ ์์ต๋๋ค CSSProperties
- ๋๋ (props: Props) => CreateCSSProperties<Props>
, ์ด๋ค I didn๋ฅผ์ ํจ๊ณผ์ ์ผ๋ก ์ด์ค ๊ฒ์ผ๋ฅด๊ธฐ ๋๋ฌธ์ ์ดํดํ ์ ์์ต๋๋ค. CreateCSSProperties
๋ฅผ ์ป๊ธฐ ์ํด Props
ํ ๋ฒ ์ ๋ฌํ ๋ค์ ๊ฐ๋ณ ์์ฑ์ ์ป๊ธฐ ์ํด ๋ค์ ์ ๋ฌํด์ผ ํฉ๋๋ค. ์ "๋๋ธ ์ฝํฌ"์
๋๊น?
์ด์ ๋ณ๋๋ก IsEmptyInterface
๊ฐ ์ ๊ณตํ๋ ์ด์ ์ ๋นํด ๋๋ฌด ๋น์ธ๋ค๋ ๊ฒ์ ์์ฌํ์ง๋ง ์์ง ์
์ฆํ์ง ๋ชปํ์ต๋๋ค. ๋ค๋ง, ์ด์ ์ ์ถฉ๋ถํ ์ดํดํ์ง ๋ชปํ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋, ์ข ๋ ๋ค์ด๋ณด์๋ฉด ๋์์ด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ ํ์ฑ๊ณผ ์ฑ๋ฅ ๊ฐ์ ์ฌ๋ฐ๋ฅธ ๊ท ํ์ ์ฐพ๊ธฐ ์ํด ํจ๊ป ์ผํ ์ ์์ต๋๊น? (์ฐธ๊ณ : "์ปดํ์ผ๋ฌ๋ฅผ ๋ ๋น ๋ฅด๊ฒ ๋ง๋ค๊ธฐ"๋ ๋ถ๋ช ํ ์คํ ๊ฐ๋ฅํ ์ ๋ต์ด์ง๋ง ์ต์ ํํ๊ธฐ ์ ์ ํ์ดํ์ ์ข์ ์์น์ ๋๊ณ ์ถ์ต๋๋ค.) ๊ฐ์ฌํฉ๋๋ค!
๋๋ material-ui ์ ํ์ ์ต์ํ์ง ์์ง๋ง ์ด๋ฌํ ์ง๋ฌธ์ ๋ตํ๋ ค๊ณ ํฉ๋๋ค.
':after': {
content: 'x',
[theme.breakpoints.up('lg')]: {
content: 'close',
},
}
},
}
});
```
b) I do not understand why `BaseCSSProperties[keyof BaseCSSProperties]` is needed there
(props: Props) => CreateCSSProperties<Props>
๋ ํ์ํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฐ๋ฆฌ๋ material-ui ์ ํ์ ๋ฒ์ ์์ ์ด ์ ํ์ ์ ์ธํ๊ณ ๋์ ์ผ์ ์ผ์ด๋์ง ์์์ต๋๋ค.๋ฒ์ 3.9.3์ ์ ํ ๊ตฌํ์ ์ดํด๋ณผ ๊ฐ์น๊ฐ ์์ ๊ฒ์ ๋๋ค. ์ด ๋ฒ์ ์์๋ ์ ํ ๊ฒ์ฌ๊ฐ ์ถฉ๋ถํ ๋น ๋ฅด๊ณ ํ์ดํ์ด ์ข์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋จผ์ ์ด ๋ฌธ์ ์ ๋ํด ๊ด์ฌ์ ๊ฐ๊ณ ์กฐ์ฌํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ ํ์ ์ด๋ ๋ถ๋ถ์ด ๋๋ฆฐ์ง ์ฌ๋ถ๋ฅผ ๋๊ตฐ๊ฐ๊ฐ ๋ฒค์น๋งํนํ๋๋ก ํ๋ ๊ฒ์ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
- ์ ์๋ ค์ง ๊ฐ CSS ์์ฑ์ ๋ํ ์ด๋ฆ๊ณผ ์ ํ์ ๊ฐ๋ ๊ฒ์ด ๋งค์ฐ ๊ฐ์น ์๊ณ ํฌ๊ธฐํ ์ ์๋ ๊ฒ์ด ์๋๋ผ๊ณ ๊ฐ์ ํ๋ ๊ฒ์ด ๋ง์ต๋๊น?
์ฌ๊ธฐ์์ ํธ๊ฒฌ์ด ์๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๋ ๋์ ์ํ๊ณ๋ฅผ ๋ณด๋๋ผ๋ ํฌ๊ธฐํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. Chrome devtools์๋ ์ด ๊ธฐ๋ฅ์ด ์์ผ๋ฉฐ style
์ํ์ CSSProperties
๋ฑ์ผ๋ก ์
๋ ฅํฉ๋๋ค. IDE์์ ๋ธ๋ผ์ฐ์ ๋ก ์ ํํ๋ ๋ชจ์ต์ ๋ณผ ์ ์๊ณ ํ
์คํธ ์ฅ์์ธ์ง ๊ธ๊ผด ์ฅ์์ธ์ง ํ์ธํ ์ ์์ต๋๋ค. ํ
์คํธ ๋ณํ.
- [...]
์ด ๊ฐ๋ฐฉ ์์ฒด๊ฐ ์ฌ๊ท์ ์ ๋๊น ์๋๋ฉด ์ถ๊ฐ ๋ ์ด์ด๊ฐ ํ๋๋ง ์์ต๋๊น?
์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๊ณ ์๋ CSS-in-JS ์๋ฃจ์
์ ํ์ธํด์ผ ํฉ๋๋ค. ๊ธฐ์ ์ ์ผ๋ก CSS์ ๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ ์ฌ๊ท์ ์ผ ์ ์์ต๋๋ค. ๋๋ ์ด ์ฌ๊ท์ฑ์ ์์ ๊ณ ๋ณด๊ณ ๋ฅผ ๋ฐ๋์ง ํ์ธํ๊ณ ์ถ์ต๋๋ค. ๊ธฐ์ ์ ์ผ๋ก ์ค์ฒฉ๋ ๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ and
์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ณํฉํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๋ ๊ฐ์ง ์์ค์ผ๋ก ์ ํํด์ผ ํฉ๋๋ค. ํ๋๋ ๋ฏธ๋์ด ์ฟผ๋ฆฌ์ฉ์ด๊ณ ๋ค๋ฅธ ํ๋๋ ์์ฌ ์ ํ๊ธฐ์ฉ์
๋๋ค. ์ด๊ฒ์ ์ฌ์ ํ โโIMO ์ ํ์ ํ์ธํด์ผ ํฉ๋๋ค.
const styles = {
root: {
'<strong i="18">@media</strong> (max-width: 12cm)': {
':hover': {}
}
}
}
@oliviertassinari๋ฅผ ์ฐ๋ ์์ ์ ๋ณธ ๊ฒ์ ๋๊น?
- [...]
CSSProperties - ๋๋ (props: Props) => CreateCSSProperties, ํจ๊ณผ์ ์ผ๋ก ์ด์ค ๊ฒ์ผ๋ฅด๊ธฐ ๋๋ฌธ์ ์ดํดํ์ง ๋ชปํ์ต๋๋ค. CreateCSSProperties๋ฅผ ์ป๊ธฐ ์ํด Props๋ฅผ ํ ๋ฒ ์ ๋ฌํ ๋ค์ ๊ฐ๋ณ ์์ฑ์ ์ป๊ธฐ ์ํด ๋ค์ ์ ๋ฌํ์ต๋๋ค. ์ "๋๋ธ ์ฝํฌ"์ ๋๊น?
์ธ์ ์์ฒด๊ฐ ์์ฑ ๋ชจ์์ด ์๋๋ผ ํจ์์ธ ๊ฒฝ์ฐ ํ ๋ง๊ฐ ํ์ํฉ๋๋ค. ์คํ์ผ์ ๋ ๊ฐ์ง ๋ค๋ฅธ ์ข ๋ฅ์ ์์ฑ ๋ชจ์์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค. ํ ๋ง(React์ ์ปจํ ์คํธ API๋ฅผ ํตํด ์ฌ์ฉ ๊ฐ๋ฅ) ๋๋ ์ํ(๊ตฌ์ฑ ์์์ ์ง์ ์ ๋ฌ๋จ):
makeStyles({ root: { color: 'blue' }}); // A
makeStyles(theme => ({ root: { color: theme.color } })); // B
makeStyles({ root: props => ({ color: props.color})}); // C
makeStyles({ root: { color: props => props.color } }); // D: same as C, only exists for dev ergonomics
makeStyles(theme => ({ root: props => ({ color: props.color || theme.color }) })); // E: what you called "double-lazy"
์ฑ๋ฅ ํฅ์์ ์ํ ์ง์ฐ ํ๊ฐ๋ณด๋ค๋ ์ปจํ ์คํธ์ ์ํ์ ์ฌ์ฉํ ์ ์์ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค.
์ด์ ๋ณ๋๋ก IsEmptyInterface๊ฐ ์ ๊ณตํ๋ ์ด์ ์ ๋นํด ๋๋ฌด ๋น์ธ๋ค๋ ๊ฒ์ ์์ฌํ์ง๋ง ์์ง ์ ์ฆํ์ง ๋ชปํ์ต๋๋ค. ๋ค๋ง, ์ด์ ์ ์ถฉ๋ถํ ์ดํดํ์ง ๋ชปํ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋, ์ข ๋ ๋ค์ด๋ณด์๋ฉด ๋์์ด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ด๊ฒ์ด ์ฌ์ฉ๋๋ ํ ๊ฐ์ง ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
๊ณ ๋ คํ๋ค
const useStaticStyles = makeStyles({ root: { color: 'blue' } });
const useDynamicStyles= makeStyles({ root: { color: props => props.color } })
function Component() {
const staticClasses = useStaticStyles(); // No error
const throwingClasses = useDynamicStyles(); // $ExpectError
const dynamicClasses = useDynamicStyles({ color: 'blue' });
}
makeStyles
์์ ๋ฐํ๋ ํจ์์ ํธ์ถ ์๋ช
์ ์ ์ถํ๋ ค๋ฉด(์ฆ, useSomeStyles
์ ๊ฐ์ ์ด๋ฆ์ ํํฌ). makeStyles
์ด๋ค ์คํ์ผ ๋ฐฑ์ด ์ ๋ฌ๋์๋์ง ํ์ธํด์ผ ํฉ๋๋ค. style bag ์ ์ฌ์ฉ๋ props ์ ํ์ ์ ์ถ ํ๋ {}
์ ํ์ ์ ์ถํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ IsEmptyInterface
Props์ ์ ์ถ๋ ์ ํ์ ํ์ธํ๊ณ ํ ๋ถ๊ธฐ์ ๋ํด 0 ๋งค๊ฐ๋ณ์๊ฐ ์๋ ํธ์ถ ์๋ช
์ ์ฌ์ฉํ๊ณ ๋ค๋ฅธ ๋ถ๊ธฐ์ ๋ํด ์ ์ถ๋ props ์ ํ( StylesRequireProps
๋ฐ StylesHook
.
๊ฐ๋จํ ๋งํด์: useStaticStyles({})
๋๋ useStaticStyles(null as any)
๋ฅผ ์์ฑํ์ง ์์๋ ๋ฉ๋๋ค. https://github.com/mui-org/material-ui/pull/14019 ์์ . ๋๋ ์ฐ๋ฆฌ๊ฐ ํธ์ถ ์๋ช
์ ๊ฒฐ์ ํ๋ ํ๋ก๋ฅผ ๋จ๋ฝ์ํฌ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์กฐ๊ฑด๋ถ ์ ํ์ ์ฌ์ฉํ๋ ๋์ ํธ์ถ ์๋ช
์ ์ค๋ฒ๋ก๋ํ ์ ์์ต๋๊น?
์ด "๊ธฐ๋ฅ"์ ๋ฌธ์ ๋ ๊ณ ๊ธ ์ฌ์ฉ์๊ฐ ์ด์ ๋ฅผ ์ดํดํ๋ค๋ฉด null as any
์ฌ์ฉํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์๋ค๋ ๊ฒ์
๋๋ค. ํ์ํ์ง ์๋๋ผ๋ ๋น ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ ๊ฒ๋ ๊ด์ฐฎ์ต๋๋ค. ๊ทธ๋ฌ๋ Material-UI๋ TypeScript์ ์ต์ํ์ง ์์ผ๋ฉด ๋งค์ฐ ํผ๋์ค๋ฝ์ต๋๋ค. ํนํ ๋๋ถ๋ถ์ ์คํ์ผ๋ง์ ์ด์จ๋ ์ํ์ ๊ธฐ๋ฐ์ผ๋กํ์ง ์๊ธฐ ๋๋ฌธ์.
๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ ํ ๊ฒ์ฌ๊ธฐ๊ฐ ์คํ์ผ๋ง ์๋ฃจ์ ์ผ๋ก ๊ฐ๋ ์ฐจ ์๋ ๊ฒ ๊ฐ์ต๋๊น? ๋๋ ์ฐ๋ฆฌ ๊ตฌ์ฑ ์์์ ๋ํ ํธ์ถ ์๋ช , ์ฆ ๋๋ถ๋ถ์ ์๊ฐ์ด ์์๋๋ props๋ฅผ ์์ํ์ ๊ฒ์ ๋๋ค.
withStyles
๋๋ makeStyles
์ฌ์ฉ์ ๊ตฌ์ฒด์ ์ผ๋ก ์ดํด๋ณด๊ธฐ ์ํด ๋ ๋ง์ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ํฌ๋กค๋งํ ์ ์์ต๋๋ค. ์ง๊ธ๊น์ง props ์ฌ์ฉ๋ฒ๋ง ์ดํด๋ณด์์ต๋๋ค.
@oliviertassinari๋ฅผ ์ฐ๋ ์์ ์ ๋ณธ ๊ฒ์ ๋๊น?
@eps1lon ์ฝ๋๋ฒ ์ด์ค์์ ์ด ์ค์ฒฉ์ด ๋ช ๋ฒ ๋ฐ์ํ์ต๋๋ค(์: <strong i="8">@media</strong> (hover: none)
). ๊ทธ๋ฌ๋ ํต์ฌ ๊ตฌ์ฑ ์์์๋ ๊ทธ๋ฆฌ ์์ฃผ ์ฌ์ฉ๋์ง ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ๋์ผํ ์ฌ์ฉ์ ์์ญ์ด๋ผ๊ณ ์์ํฉ๋๋ค. ๊ทธ๊ฒ์ ๋ถ๋ช
ํ ์ ์ถฉ์์ ์ผ๋ถ์ผ ์ ์์ต๋๋ค.
@beholderrk
BaseCSSProperties[keyof BaseCSSProperties]
- ๊ทธ๋ฌ๋ฉด ๋ชจ๋ ์์ฑ์ ํธํ ๊ฐ๋ฅํ ์ ํ์ด ์๋ค๋ ๊ฒ์ด ์ฌ์ค์ด ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด CSS์์ ๊ฐ์ง ์ ์๋ ์ ์ผํ ์์ฑ์ด name: string
๋ฐ width: number
ํฉ๋๋ค. ๋ ์์ฑ ๋ชจ๋์์ ์๋ํ๋ ์ธ๋ฑ์ค ์๋ช
์ ์ง์ ํ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋ชจ๋ ์์ฑ์ด string | number
๋ผ๊ณ ๋งํ๋ ๊ฒ์
๋๋ค. ์ข์ง ์์ต๋๋ค. name
๋ number
width
๊ฐ ๋์ง ์๊ณ string
๊ฐ ๋์ง ์์ต๋๋ค. ํ์ง๋ง ์๋ํฉ๋๋ค. ์ง์ง ๋ฌธ์ ๋ ๋น์ ์ด ์ํ๋ ๊ฒ์ ์ค์ ๋ก ํํํ ์ ์๋ค๋ ๊ฒ์
๋๋ค(์ ์ด๋ ์ฐ๋ฆฌ๊ฐ ๊ฒฐ์ ํ ์ ์๋ ํ - ๊ทธ๊ฒ์ ํ๋ "์๋ฆฌํ" ํดํน์ด ์์ ์ ์์ต๋๋ค). ์ค์ ๋ก ์ ํ์ name: string
, width: number
๋๋ x: CSSProperties
๊ฐ ํฌํจ๋์ด ์๋ค๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค. ์ฌ๊ธฐ์ x
๋ name
๋๋ width
์ด ์๋๋๋ค. ์ ์ ์๋์ด ํ์ธ๋ ๊ธฐ์ค์ ์ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. ํน์ ๋งํฌ๊ฐ ์์ผ์ ๊ฐ์?
์์ : ์ฐพ์์ต๋๋ค.
@eps1lon ๋ํ์ ์ฐธ์ฌํ๊ฒ ๋์ด
isEmptyInterface
์ ๊ด๋ จํ์ฌ ์์ฑ ๋งค๊ฐ๋ณ์๋ฅผ (์:) useStaticStyles
์ต์
์ผ๋ก ๋ง๋ค ์ ์์ต๋๊น? ํธ์ถ์๊ฐ ์์ํ ๋ ์๋ตํ ์ ์๋ค๋ ์ ์์ ๋ ์ ํํ์ง๋ง ์ ํ ๊ฒ์ฌ๊ฐ ํจ์ฌ ์ ๋ ดํฉ๋๋ค. ๋ด๊ฐ ๋งํ๋ฏ์ด, ๋๋ ๋น์ ์ ์ํ ์ซ์๋ ์ด๋ค ๊ฒ๋ ๊ฐ์ง๊ณ ์์ง ์์ต๋๋ค. ๊ทธ๊ฒ์ ๋จ์ง ๋ด ์ถ์ธก์ผ ๋ฟ์
๋๋ค.
2(b)์ ๋ํด ์ด๋ป๊ฒ ์๊ฐํ์ญ๋๊น? ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ์์ฑ ์ด๋ฆ์ด ํ์ฉ๋๊ณ ๋ฐํ ์ ํ์ด ๋ง์ ๊ฒ ์ค ํ๋์ผ ์ ์๋ค๊ณ ๋งํ๋ฏ๋ก ํด๋น ์ ํ์ ๋ง์ ๊ฐ์น๋ฅผ ์ ๊ณตํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
isEmptyInterface์ ๊ด๋ จํ์ฌ (์๋ฅผ ๋ค์ด) useStaticStyles์ ๋ํ properties ๋งค๊ฐ๋ณ์๋ฅผ ์ ํ์ฌํญ์ผ๋ก ๋ง๋ค ์ ์์ต๋๊น?
๋จผ์ ํธ์ถ ์๋ช ์ ์ค๋ฒ๋ก๋ํ๋ ์คํ์ ํ๊ณ ์ด๊ฒ์ด ์ด๋ค ์ํฅ์ ๋ฏธ์น๋์ง ํ์ธํ๊ณ ์ถ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ํญ์ ์ ํ ์ฌํญ์ผ๋ก ๋ง๋ค์ด ์๋ฆฌ๋ฅผ ์ค์ด๋ ค๊ณ ํฉ๋๋ค. ๊ฑฐ์ ๋ชจ๋ ์ฌ์ฉ ์ฌ๋ก์์ ํ ๋ฒ๋ง ํธ์ถํ๋ฏ๋ก ์ค์๋ฅผ ํ ๋ฒ๋ง ์ ์ง๋ฅผ ๊ฐ๋ฅ์ฑ์ด ๋๊ธฐ ๋๋ฌธ์ ์๋ฆฌ๋ฅผ ๋ ๋ค๋ฆฌ๊ฒ ํ๋ ๊ฒ์ด ํ์๋ณด๋ค ๋ ์์ ํด ๋ณด์ด๋ฉฐ ๋งค์ฐ ๋น ๋ฅด๊ฒ ๋ํ๋ฉ๋๋ค. ์ฐ๋ฆฌ์๊ฒ ๋ง์ ์ฑ๊ณผ๋ฅผ ๊ฑฐ๋์ง ๋ชปํ๋ค๋ฉด ํ๋งคํ๊ธฐ ์ด๋ ค์ธ ๊ฒ์ ๋๋ค. ์ ๋ ์๋ ๋ฌธ์ (https://github.com/microsoft/TypeScript/issues/34801#issue-514055289)์ ๋ํด ์์ฑ๋ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
2(b)์ ๋ํด ์ด๋ป๊ฒ ์๊ฐํ์ญ๋๊น? ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ์์ฑ ์ด๋ฆ์ด ํ์ฉ๋๊ณ ๋ฐํ ์ ํ์ด ๋ง์ ๊ฒ ์ค ํ๋์ผ ์ ์๋ค๊ณ ๋งํ๋ฏ๋ก ํด๋น ์ ํ์ ๋ง์ ๊ฐ์น๋ฅผ ์ ๊ณตํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ค์๋ก ๊ฑด๋๋ฐ์์ต๋๋ค. IsEmptyInterface ์คํ ํ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
@eps1lon ์ ์ ์ผ๋ก ๋์ํฉ๋๋ค. ์ ๊ฑฐํ๋ ๊ฒ์ด ์๋นํ ์ฑ๋ฅ ํฅ์์ด ์๋ ๊ฒฝ์ฐ isEmptyInterface
์ ์งํฉ๋๋ค.
#19320์ ์ฌ์ฉํ์ฌ ํจ์ ์ค๋ฒ๋ก๋๊ฐ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ฌ์ฑํ๋ ์ผ๋ถ ๋ณต์กํ ์กฐ๊ฑด๋ถ ์ ํ์ ์ ๊ฑฐํ์ต๋๋ค( IsEmptyInterface
๋ฐ ๋ชจ๋ ๋ถ์ธ ๋
ผ๋ฆฌ ์ ํ ์ ๊ฑฐ). ์ฝ๋๊ฐ ์ ์ ๊ฒ ์ธ์๋ ์ฐ๋ฆฌ์๊ฒ ๋ง์ ๊ฒ์ ์ป์ง ๋ชปํ ๊ฒ ๊ฐ์ต๋๋ค.
ํ์ฌ TS 3.2.4์ 3.7.4 ์ฌ์ด๋ฅผ ์๋ค๊ฐ๋ค ํ๊ณ ์๋ค๊ณ ๋ง๋ถ์ด๊ณ ์ถ์ต๋๋ค. ์ฐ๋ฆฌ์ ์ ํ ํ ์คํธ ์ค์ํธ๋ 3.2.4์ ๋นํด 3.7.4์์ 50% ๋๋ฆฌ๊ฒ ์คํ๋ฉ๋๋ค(~90์ด ๋ 50์ด).
CSSProperties์ ๊น์ด๋ฅผ ์ ํํ๊ณ ๋ฏธ๋์ด ์ฟผ๋ฆฌ ๋ฐ ์์ฌ ์ ํ๊ธฐ์ ๋ํ ์ง์์ ์์ ํ ์ ๊ฑฐํ ์ ์๋์ง ๊ณ์ ์กฐ์ฌํ๊ฒ ์ต๋๋ค. ๊ทธ๊ฒ๋ค์ ์ ๋ ฅํ์ง ์๋ ๊ฒ์ ์ค์ ๋ก ์ต์ ์ด ์๋๋๋ค. ์ ํ ๊ฒ์ฌ๊ธฐ๋ ํฉ๋ฆฌ์ ์ธ ์๊ฐ์ ์ด๋ฅผ ํ์ธํ ์ ์์ด์ผ ํฉ๋๋ค.
์ ํ ๊ฒ์ฌ๊ธฐ๊ฐ ์ค์ ๋ณ๋ชฉ ํ์์ผ ์ ์์ต๋๋ค. ์ด๋ค ๋ฒ์ ์ ์ฑ๋ฅ์ด ์ ์ค๋์๋์ง ์กฐ์ฌํ ์ ์์ต๋๋ค.
3.2.4 ๋ฐ 3.7.4์์ ์คํ ์ค์ธ ๋ช ๋ น์ ์ ์๊ฒ ๋ณด๋ด์ฃผ์๋ฉด ๋ก์ปฌ์์ ํ๋กํ์ผ๋งํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฒฝํ์ ๋ฐ๋ฅด๋ฉด ์์ธ์ 3.2.4 ์ดํ ์ถ๊ฐ๋ ๋ฐ๋์งํ ์ถ๊ฐ ๊ฒ์ฌ๋ก ํ๋ช ๋ ๊ฒ์ ๋๋ค. (๊ทธ๋ฆฌ๊ณ ๋๋ "0s"๊ฐ ์คํ๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค - ์๋ง๋ "40s" ๋๋ "50s"?)
CSSProperties์ ๊ด๋ จํ์ฌ ์์ฑ ์ด๋ฆ๊ณผ ์ ํ์ ์ ์งํ๋ ๊ฒ์ด ๋งค์ฐ ์ค์ํ๋ค๋ ๋ฐ ๋์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ ๋นํ ์๊ฐ ์์ ํ์ธํ๋ ๊ฒ๋ณด๋ค ๋ ์ค์ํ ๊ฒ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฒซ ๋ฒ์งธ ๋ฌธ์ ๋ ์ ํ ์์คํ ์์ ์ํ๋ ๋ชจ์์ ์ค์ ๋ก ํํํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๋ฌธ์ ์ ๋ํ ์ผ๋ฐ์ ์ธ ํด๊ฒฐ์ฑ ์ ์ฐพ๋ ๋ฐ ์๊ฐ์ ํ ์ ํ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทํ๊ฐ ํด๋น ํ ๋ก ์ ์ฐธ์ฌํ๋ ๋ฐ ๊ด์ฌ์ด ์๋ค๊ณ ๊ฐ์ ํด๋ ๋ ๊น์?
์ฌ๋ฌ ๋ฒ์ ์ ์ปดํ์ผ๋ฌ๋ฅผ ๋น๊ตํ๊ธฐ ์ํ ์คํฌ๋ฆฝํธ๊ฐ ์์ผ๋ฏ๋ก ์คํํ๊ธฐ๋ฅผ ์ํ๋ ์๋นํ ์์ ์ ์ธ ํ ์คํธ๋ฅผ ์๋ณํ ์ ์๋ค๋ฉด ์๊ฐ ๊ฒฝ๊ณผ์ ๋ฐ๋ฅธ ์๋ ์ ํ๋ฅผ ์ฐจํธ๋ก ํ์ ํ ์ ์์ต๋๋ค.
(๊ทธ๋ฆฌ๊ณ ๋๋ "0s"๊ฐ ์คํ๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค - ์๋ง๋ "40s" ๋๋ "50s"?)
์ฃ์กํฉ๋๋ค. 50๋์ ๋๋ค.
3.2.4 ๋ฐ 3.7.4์์ ์คํ ์ค์ธ ๋ช ๋ น์ ์ ์๊ฒ ๋ณด๋ด์ฃผ์๋ฉด ๋ก์ปฌ์์ ํ๋กํ์ผ๋งํ ์ ์์ต๋๋ค.
๊ทธ๊ฒ์ ๊ตฌํํ๋ ๋ชจ๋ ์์
๊ณต๊ฐ์์ ๋์ผํ ๋ช
๋ น์ ์คํํ๋ ๋ฃจํธ์ yarn typescript
์
๋๋ค. ์๋ฅผ ๋ค์ด yarn workspace @material-ui/styles run typescript
๋ tslint
๋ฐ dtslint
์ $ExpectError
์ ํ์ ํ
์คํธํฉ๋๋ค. 3.7.4์์ ๋ช ๊ฐ์ง ์ค๋ฅ๊ฐ ๋ฐ์ํ์ฌ ํ
์คํธ๋ฅผ ์กฐ์ ํด์ผ ํ์ต๋๋ค(#19242 ์ฐธ์กฐ).
์ฒซ ๋ฒ์งธ ๋ฌธ์ ๋ ์ ํ ์์คํ ์ด ์ค์ ๋ก ์ํ๋ ๋ชจ์์ ํํํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
๊ทธ๋งํผ ์์ฌํ๋ค. ์ธ๋ฑ์ค ์๋ช ์ด ์๋ ๊ฐ์ฒด์ "๊ตฌ์ฒด์ ์ธ" ๋ชจ์์ ํผํฉํ๋ ๋ฐฉ์์ ๋จ์ง ํด๊ฒฐ ๋ฐฉ๋ฒ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
๋๋ ๋น์ ์ด ๊ทธ ํ ๋ก ์ ์ฐธ์ฌํ๋ ๋ฐ ๊ด์ฌ์ด ์๋ค๊ณ ๊ฐ์ ํด๋ ๋ ๊น์?
๋ถ๋ช ํ. ๋๋ ๋น์ฌ๊ท CSSProperties์ ๋ํด ์กฐ๊ธ ๋ ์๊ฐ์ ํ ์ ํ ๋ค์ ์ด๋ฌํ ์ ํ์์ ์ฐ๋ฆฌ๊ฐ ์ฐพ๊ณ ์๋ ๊ฒ์ ์ค๋ช ํ๊ธฐ ์ํด ์กฐ๊ธ ๋ ํ ์คํธ๋ฅผ ์์ฑํ ๊ฒ์ ๋๋ค. ๋ค๋ฅธ css-in-js ์คํ์ผ๋ง ์๋ฃจ์ ์ด ๋น์ทํ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์ผ์ผํค์ง ์์๊น ์๊ฐํฉ๋๋ค.
๋๋ ๋ด์ผ ๊ทธ ๋ช ๋ น์ ์๋ํ ๊ฒ์ด๋ค(๋๋ ๋ด๊ฐ ํํ์ ์๊ฐ์ ์๊ณ ๋ฏธ๊ตญ ๊ณตํด์ผ์ ์ค์ํ๋ค๊ณ ์ธ๊ธํด์ผ ํ๋ค๊ณ ๊ฐ์ ํ๋ค).
์ธ๋ฑ์ค ์๋ช ์ด ์๋ ๊ฐ์ฒด์ "๊ตฌ์ฒด์ ์ธ" ๋ชจ์์ ํผํฉํ๋ ๋ฐฉ์์ ๋จ์ง ํด๊ฒฐ ๋ฐฉ๋ฒ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค. ์ด๋ป๊ฒ ํํํด์ผ ์ข์์ง ๊ณ ์ฌํ๊ณ ์์ต๋๋ค. ์, ์์ธ ์๋ช ์ด ์ํ๋ ์์ ์ ์ํํ์ง ์๋ ๊ฒ์ด ๋ง์ต๋๋ค. ๋ณํ ๊ฐ๋ฅ์ฑ์ ๋ํด ๋ช ๊ฐ์ง ์๊ฐ์ด ์์ง๋ง ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ์กฐ์ฌํด์ผ ํฉ๋๋ค.
๋ค๋ฅธ css-in-js ์คํ์ผ๋ง ์๋ฃจ์ ์ด ๋น์ทํ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์ผ์ผํค์ง ์์๊น ์๊ฐํฉ๋๋ค.
๋งค์ฐ ๊ทธ๋ ๋ค. ์ฐ๋ฆฌ๋ ์ฌ๋ฌ๋ถ์ ์ํด ํ๋ ๋ชจ๋ ๊ฒ์ด ์ ์ฒด ์ํ๊ณ๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด ์ผ๋ฐํ๋ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๋ถ๋ช
ํ ๊ฒ์ ๋์น๊ณ ์๋ ๊ฒ ๊ฐ์ง๋ง ํ์ฌ ๋งํ ์์ต๋๋ค. ๋จผ์ Windows๋ฅผ ํฌ๊ธฐํ์ต๋๋ค. Linux์์ ๋ ์ ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์์ธํ ์์๋ณด๋ ค๋ฉด ์๋ ค์ฃผ์ธ์. ๋์งธ, yarn typescript
๋ฅผ ์คํํ๋๋ก ํ ์ ์์ต๋๋ค. ์ ๊ฐ ๋งํ ์ ์๋ ํ ๊น๋ํ๊ฒ - ํ์ง๋ง ์์ํ tsc๊ฐ ์๋ tslint๋ฅผ ์คํํ๋ ๊ฒ์ผ๋ก ๋ณด์
๋๋ค. ๋์ผํ tsconfig.json์์ tsc๋ฅผ ์คํํ๋ฉด(ํนํ ์คํ์ผ๋ก ํ
์คํธ ์ค์
๋๋ค) ~40๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋ด๊ฐ ๋ญ ์๋ชปํ๊ณ ์์ฃ ? ํ๋กํ์ผ๋ง ๋ชฉ์ ์ ์ํด repo๋ฅผ ๋จ์ผ tsc ํธ์ถ๋ก ์ค์ด๋ ๊ฒ์ด ๋งค์ฐ ๋์์ด ๋ ๊ฒ์
๋๋ค.
@amcasey yarn typescript
๋ ์ปดํ์ผ์ด ์๋๋ผ ์ ํ์ ํ
์คํธํ๋ ๊ฒ์
๋๋ค. ํ์คํ Typed ๋ฆฌํฌ์งํ ๋ฆฌ์์ ์ฌ์ฉ๋ ๊ฒ๊ณผ ์ ์ฌํ ์ค์ ์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. packages/*
TypeScript ํ์ผ์ ๊ฑฐ์ ํญ์ $ExpectError
ํฌ์ฐฉํ๋ ํต๊ณผํ๊ฑฐ๋ ์คํจํด์ผ ํ๋ ๋ช
๋ น๋ฌธ์ ๋ฌถ์์
๋๋ค.
๋ด๊ฐ ์ต๊ณ "์ค์ "ํ
์คํธ ์ผ์ด์ค๊ฐ ์ฌ์ฉํ๊ณ ์๋ ๊ฒ tsc
ํตํด ์ฐ๋ฆฌ์ ๋ฌธ์์ yarn workspace docs run tsc -p tsconfig.json
์ถ๊ฐ ํ ํ skipLibCheck: true
๋ฐ noEmit: true
์ ./docs/tsconfig.json
:
--- a/docs/tsconfig.json
+++ b/docs/tsconfig.json
@@ -3,6 +3,8 @@
"include": ["types", "src/pages/**/*"],
"compilerOptions": {
"allowJs": false,
- "noUnusedLocals": true
+ "noUnusedLocals": true,
+ "noEmit": true,
+ "skipLibCheck": true
}
}
@eps1lon ๋ช ํํ
์ด ์ค์ ์ ์๋ฒฝํฉ๋๋ค. ํ์ธ ์๊ฐ์ด 3.3๊ณผ 3.4 ์ฌ์ด์์ ๋ ๋ฐฐ์ธ ๊ฒ์ ๋ณด๊ณ ์์ต๋๋ค.
| ๋ฒ์ | ์๊ฐ ํ์ธ |
|-|-|
| 3.2 | 16.71์ด |
| 3.3 | 16.79์ด |
| 3.4 | 35.25์ด |
| 3.5 | 21.40์ด |
| 3.6 | 23.10์ด |
| 3.7 | 27.39์ด |
์กฐ๊ธ ๋ ํ๊ณ ๋ค๊ฒ ์ง๋ง ์กฐ๊ฑด๋ถ ์ ํ์ 3.3 ๊ตฌํ์ ๋ถ์์ ํ๊ณ 3.4 ๊ตฌํ์ ๋๋ฆฌ๊ณ 3.5 ๊ตฌํ์ ์ํธํ๋ค๊ณ ๋ค์์ต๋๋ค. ๋ฐ๋ผ์ ๋ถํํ๋ ์ด๊ฒ์ ์์๋ฉ๋๋ค.
ํนํ ์ด ๋ณ๊ฒฝ์ผ๋ก ์ธํด ์ด ๋ฒ๊ทธ์ ์ค๋ช ๋ ๋๋ก ์๋๊ฐ ๋๋ ค์ก๋ค๊ณ ์๊ฐ ํฉ๋๋ค .
๋๋ 3.5์ 3.7 ์ฌ์ด์ ๊ฒ์ฌ๋ฅผ ์คํํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด 6์ด ์ฆ๊ฐํ๋ค๋ ์ฌ์ค์ ์๊ฒ ๋์์ต๋๋ค. ๊ฝค ์๋นํด ๋ณด์ ๋๋ค.
@embeddedt ์ด ์ซ์๋ ๊ฐ ๋ฒ์ ์ ๋จ์ผ ์คํ์์ ๋์จ ๊ฒ์ด๋ฏ๋ก ์ฝ๊ฐ์ ๋ ธ์ด์ฆ๊ฐ ์์ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ด๊ฐ ํ๊ณ ๋ค์ด์ ๋ญ๊ฐ๋ฅผ ์ฐพ์ ์ ์๋์ง ํ์ธํ๊ฒ ์ต๋๋ค.
Linux VM์์ ๋ค์ ์คํํ๋๋ฐ 3.7์ 3.5๋ณด๋ค ์ผ๊ด๋๊ฒ 20-25% ๋๋ ธ์ต๋๋ค.
๋์ผํ ๋น๋์ ์ฐ์ ์คํ์ด ~5%์ฉ ๋ค๋ฅด๊ณ 3.5์ 3.6 ๋๋ 3.6๊ณผ 3.7 ์ฌ์ด์ ์ฐจ์ด๊ฐ ~10%์ ๋ถ๊ณผํ๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ์ด๋ฑ๋ถํ๊ธฐ ๋งค์ฐ ์ด๋ ค์ด ๊ฒ์ผ๋ก ์ ์ฆ๋์์ต๋๋ค.
๋ด๊ฐ ์์์ฐจ๋ฆฐ ํ ๊ฐ์ง ์์ฌ์ค๋ฌ์ด ์ ์ styled-components
๊ฐ TS >= 3.7์ ๋ํด ๋ณ๋์ .d.ts ํ์ผ์ ์ ๊ณตํ๋ฏ๋ก ๋น๊ต๊ฐ ์ฌ๊ณผ์ ์ฌ๊ณผ๊ฐ ์๋ ์ ์๋ค๋ ๊ฒ์
๋๋ค.
๋๋๊ฒ๋ ์๋ก์ด styled-components
์ ํ์ด ๋ ๋นจ๋ผ ๋ณด์
๋๋ค. ์ฌ๊ณผ์ ์ฌ๊ณผ๋ฅผ ๋น๊ตํ๋ฉด ์ฌ์ ํ ์กฐ์ฌ๊ฐ ๋ ์ฌ์ธ ๊ฒ์
๋๋ค.
์๋ฆฌํ ์๋ฃจ์ ์ด ์๊ฐ๋์ง ์์ ๋ณํฉ์ผ๋ก ์ปดํ์ผ ์๊ฐ ๋ณํฉ์ ํ๋กฏํ๊ณ ์คํ์ดํฌ๋ฅผ ์ฐพ์ต๋๋ค. ๋ด์ผ ์ซ์๊ฐ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
@amcasey ์ด ๋ฌธ์ ๋ฅผ ์กฐ์ฌํ๊ธฐ ์ํด
์ด ์์ ์์ ์ฐ๋ฆฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋จธ์ง ๋ถ๋ถ์ ๋ํ ์ ์ํ ํผ๋๋ฐฑ์ ์ํด JSS์์ ์ฝ๊ฐ์ ์ ํ ์์ ์ฑ์ ๊ตํํ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค. ๋๋ก๋ Typescript ์๋ฒ๊ฐ ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ๋ผ์ก๊ธฐ๊น์ง 8-10์ด์ ๋๊ธฐ ์๊ฐ์ด ์์๋ฉ๋๋ค.
3ํ ํ๊ท ์ ๋ด๋๋ผ๋ ๋ฐ์ดํฐ๋ ๋งค์ฐ ์๋๋ฝ์ต๋๋ค. ๊ทธ๋ฌ๋,์์ ๋ฐํ์์ ๋๊ฒ ํ๋ฝ์ด์์ ๋ํ๋ฉ๋๋ค https://github.com/microsoft/TypeScript/commit/ad322a561a301ae357da051b9221b2222c13be36 ์์ ๋์ ๋๊ฒ ์ฆ๊ฐ (๋๋ต ์ด์ ์์ค์ผ๋ก ๋์ ๊ฐ๊ธฐ) https://github.com/microsoft/TypeScript๋ฅผ /commit/480b73915fdd805952fd355e4cf3e1bc803e0878 ๊ทธ๋ฆฌ๊ณ https://github.com/microsoft/TypeScript/commit/c5e6d95e9330048a ์ ํน์ ์คํ์ดํฌ๋ฅผ ํฌํจํ์ฌ (๋์๊ฒ ๋๋ฌด ๊ท ์ผํ๊ฒ ๋ณด์ด๊ณ ํ๊ฒฝ ์์ธ์ด ์์ฌ๋์ง๋ง) ์ผ๋ฐ์ ์ธ ์์น ์ถ์ธ ๋๋ ์ผ๋ฐ์ ์ธ ์์น ์ถ์ธ๋ฅผ ํ์ธํ๊ธฐ ์ํด ๋ช ๊ฐ์ง ํ ์คํธ๋ฅผ ๋ ์คํํ ๋๊น์ง ์ฒ์ ๋ ๊ฐ์ง์ ์ง์คํ ๊ฒ์ ๋๋ค(๋ชจ๋ ์ปค๋ฐ์ด ์ด๋ป๊ฒ ๊ท ์ผํ๊ฒ ์ ํ๋ ์ ์์ต๋๊น?).
์์น ์ถ์ธ๋ ๋ฉด๋ฐํ ์กฐ์ฌ๋ฅผ ๋ฐ๊ณ ์์ผ๋ฉฐ ๊ทธ ์์ธ์ด ๋ฌด์์ธ์ง ์ ํ ๋ชจ๋ฆ ๋๋ค. ์๋ง๋ ๊ฐ๋ณ ๊ฐ์์ด ๋๋ฌด ๊ฐ๊น์์ ์์์ผ๋ก ์ธํด ๋จ์ผ ๊ณก์ ์ฒ๋ผ ๋ณด์ผ ์ ์์ต๋๋ค.
์ปค๋ฐ๋น ์ต๋ 10๊ฐ์ ์คํ์ ์ฌ๋ ธ๊ณ ์ด์ ๊ฒฝ์ฌ ์์ญ์ 4๊ฐ์ ๋๋ ทํ ํ๊ท๊ฐ ์์ต๋๋ค. :์๋ค:
https://github.com/microsoft/TypeScript/commit/26caa3793e310e271ddee8adc1804486e5b0749f(~700ms )
https://github.com/microsoft/TypeScript/commit/250d5a8229e17342f36fe52545bb68140db96a2e(~500ms )
https://github.com/microsoft/TypeScript/commit/7ce793c5b8c621af5ce50af0ca3958c7bd6541bf(~1300ms )
https://github.com/microsoft/TypeScript/commit/28050d5c47c6cd7627555f12cf13b1062f80322a(~400ms )
(ํ๊ท๊ฐ ์์๋๊ธฐ ์ ์ ์ด ์๊ฐ์ ~33์ด์์ต๋๋ค.)
๊ธฐ๋์น๋ฅผ ์กฐ๊ธ ๋ฎ์ถ๊ธฐ ์ํด: ์ด๋ฌํ ํ๊ท ์ค ์ผ๋ถ๋ ๊ฐ์น ์๋ ์ถ๊ฐ ์ํ๋ก ํ๋ช ๋ ๊ฐ๋ฅ์ฑ์ด ๋งค์ฐ ๋์ผ๋ฉฐ ์ด๋ฌํ ์ํ๋ฅผ ๋ชจ๋ ๋ฌด๋ฃ๋ก ์ป์ ์ ์๋ค ํ๋๋ผ๋ ์ฌ์ ํ 20%๋ง ํ ์ธ๋ฉ๋๋ค. ".
ํธ์ง: ๋งํฌ๋ฅผ ์ ๋ฐ์ดํธํ์ต๋๋ค. ์๊ฐ์ ๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ๊ฐ๊ณ ์์๊ธฐ ๋๋ฌธ์ ํผ๋์ค๋ฌ์์ ๊ฐ ํ๊ท _before_ ๋ณํฉ์ ํ๋๊ทธ๋ฅผ ์ง์ ํ์ต๋๋ค.
@eps1lon ์ด ๋์์ ๋๊ตฐ๊ฐ @ts-ignore
์ ์ ๊ฑฐํ๋ ๊ฒ์ด ๋์์ด ๋ ์ ์๋ค๊ณ ์ ์ํ์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ค๋ฅ๊ฐ ๊ฐ์ง๋๋ฉด ์ฌ์ฉ์์ ์ต์ฐ์ ์์๋ ์ค๋ฅ์ ๋ํ ์ข์ ์ ๋ณด๋ฅผ ์ป๋ ๊ฒ์ผ๋ก ๊ฐ์ ํ๋ฏ๋ก ๋ง์ ์ถ๊ฐ ์์
์ด ์ํ๋ ์ ์์ต๋๋ค. ํด๋น ์ ๋ณด๊ฐ ์ดํ์ ์ญ์ ๋๋ฉด( @ts-ignore
์ธํด) ๊ทธ ์๊ฐ์ ๋ญ๋น๋ฉ๋๋ค. (๋ถํํ๋ ์ค๋ฅ๋ฅผ ๊ฐ์งํ ํ์๊ฐ ์๋ค๋ ๊ฒ์ ๊ฐ์งํ๋ ๊ฒ์ ๊ฐ๋จํ์ง ์์ต๋๋ค.) ๋์ ์ ๋ต์ ์ปดํ์ผ๋ฌ๊ฐ ๋ถํ์ ๋ฉ์ถ ๋๊น์ง ๋ช
์์ ์ ํ ์ฃผ์ฅ( any
)์ ์ถ๊ฐํ๋ ๊ฒ์
๋๋ค.
@eps1lon ์ด ๋์์ ๋๊ตฐ๊ฐ
@ts-ignore
์ ์ ๊ฑฐํ๋ ๊ฒ์ด ๋์์ด ๋ ์ ์๋ค๊ณ ์ ์ํ์ต๋๋ค.
docs/
์์ ํ ๋ฒ๋ง ์ฌ์ฉํ์ต๋๋ค. ๋๋ ๋ง์ผ์ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ์ฌ ์ด์จ๋ ๊ทธ๊ฒ์ ์ ๊ฑฐํ๋ค: #19504
์์งํ ๋งํด์ @ts-ignore
์ด ๊ฒฝ์ฐ์๋ ์ํฐ ํจํด์ธ ๊ฒ์ฒ๋ผ ๋ค๋ฆฝ๋๋ค. ์ด๋ค ์ข
๋ฅ์ ์ค๋ฅ๊ฐ ์๋์ง์ ๊ฐ์ ์ ์ฉํ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ง ์์ ๋ฟ๋ง ์๋๋ผ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์๋ ๋ฐ์ํฉ๋๋ค.
๋ด๊ฐ ๋งํ ์ ์๋ ํ @ts-ignore
๋ ์ ํ ๊ฒ์ฌ ์ค์ธ .js
ํ์ผ์์๋ง ์ ์ฉํฉ๋๋ค.
ํ , PR ๊ฐ์ ์ค๋ฅ ๋ฉ์์ง๊ฐ ์ฑ๋ฅ์ ์ ํ์ํค๋ ์ด์ ๋ฅผ ๊ฑฐ์ ํ์คํ ์ค๋ช ํ์ง ๋ชปํฉ๋๋ค. ๊ทธ๋๋ ํ์คํ ๊ฐ์ ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๐
์ฑ๋ฅ์ ํ๊ทํ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํ ๋ฒ๊ทธ:
https://github.com/microsoft/TypeScript/issues/36562
https://github.com/microsoft/TypeScript/issues/36564
https://github.com/microsoft/TypeScript/issues/36565
https://github.com/microsoft/TypeScript/issues/36566
https://github.com/microsoft/TypeScript/issues/36567
๊ณต์ ํ ๊ฒฝ๊ณ : ์ด๋ค ์ค ์ผ๋ถ๋ ๊ฐ์น๊ฐ ์๋ค๊ณ ํ๋จ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
์ ๋ TypeScript์ ์ธ๊ณ, ํนํ JS ์คํ์ผ ์๋ฃจ์ ๊ณผ ๊ด๋ จํ์ฌ ๋งค์ฐ ์ต์ํ์ง๋ง ์ง๋ ํ ๋ฌ ๋์ ์ด ์ค๋ ๋๋ฅผ ์กฐ์ฉํ ๋ฐ๋ผ๊ฐ๊ณ ์ ์ฌ์ ์ธ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ํ ์ฌ๋๋ค์ ์๊ฐ์ ๋ฃ๊ณ ์ถ์์ต๋๋ค. ์ ์ด๋ ๋จ๊ธฐ์ ์ผ๋ก๋.
๋๋ ์ผ๋ถ ์ฌ์ฉ์(๋ ์์ ์ด ํ๋์)๊ฐ ๋ด์ฅ๋ ์คํ์ผ๋ง ์์คํ ์ ๋ง์ด ์ฌ์ฉํ์ง ์๊ฑฐ๋ ์์ ํ ํผํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ๋๋ ์ฃผ๋ก ์ผ๋ฐ CSS ๋๋ Sass์ ํจ์ฌ ๋ ์ต์ํ๊ณ JS ์คํ์ผ๋ง ์์คํ ์ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ํํค์น ์๊ฐ์ด ์์๊ธฐ ๋๋ฌธ์ ์ฃผ๋ก ๊ทธ๋ ๊ฒ ํ์ต๋๋ค. ๋๋ ๋๋ง์ ํด๋์ค ์ด๋ฆ์ ๋ง๋ค๊ณ , ๋ณ๋์ ์คํ์ผ์ํธ ํ์ผ์ ์์ฑํ๊ณ , React ๊ตฌ์ฑ ์์ ๋ด๋ถ์ ํด๋์ค ์ด๋ฆ์ ์ฌ์ฉํ๊ณ ๊ณ์ํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๋ ์ผ๋ฐ HTML์ ์์ฑํ๋ ๊ฒ์ฒ๋ผ ์คํ์ผ์ ์ง์ ํฉ๋๋ค.
์ฆ, ์คํ์ผ๋ง ์์คํ
์ ๊ฐ๋น์ผ ๋ถ๋ถ์ ๋ํ ์ ํ ๊ฒ์ฌ๋ฅผ ํด์ ํ๋ ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ๊ฐ๋ฅ/์ค์ฉ์ ์
๋๊น( type CSSProperties = any
์ ๊ฐ์ ์์
์ ์กฐ๊ฑด๋ถ๋ก ์ํํ์ฌ)? ์คํ์ผ ์์คํ
์ ์ฌ์ฉํ๋ ์ฌ๋๊ณผ ์ฌ์ฉํ์ง ์๋ ์ฌ๋์ ์์ ๋ํ ํต๊ณ๋ฅผ ์์ง ๋ชปํ์ง๋ง ์ค์ ๋ก ํฐ ํผํด๋ฅผ ์ค ์๋ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. , ์ต์ํ ํ ์ฌ์ฉ์ ์ธ๊ทธ๋จผํธ์ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๋น ๋ฅธ ๋ฐฉ๋ฒ์ด ๋ ๊ฒ์
๋๋ค.
์ผ๋ฐ์ ์ธ ์์ด๋์ด๋ฅผ ์ธ๊ธํ๊ณ ์ถ์์ต๋๋ค. ๋ง์๊ป ์์ธ์. :์ฝ๊ฐ_์๋_์ผ๊ตด:
@embeddedt ์ผ๋ฐ์ ์ผ๋ก any
๋ก ๋ช
์์ ์ผ๋ก ํ์ํ๋ ๊ฒ์ ํด๋น ๊ธฐํธ์ ๋ํ ์ ํ ๊ฒ์ฌ๋ฅผ ๋นํ์ฑํํ๋ ์ข์ ๋ฐฉ๋ฒ์
๋๋ค. ๊ทธ๋ ๊ธด ํ์ง๋ง ์ด์ ์ ์ธ์ ๋ฐฉํดํ ์ ์๋์ง, ์๋๋ฉด ์ ์ํ ๋๋ก ์ค๋ณต ์ ์ธ ๋ฌธ์ ๋ฅผ ํผํ๊ธฐ ์ํด ์ปดํ์ผ๋ฌ ์ง์์ด ํ์ํ์ง ๊ธฐ์ต๋์ง ์์ต๋๋ค.
์๋ก์ด ์์น(๋ค๋ฅธ ๊ธฐ๊ณ, ๋ค๋ฅธ ์๊ฐ ์ธก์ ๋ฒ):
| ๋ฒ์ | ์ด ์๊ฐ |
|-|-|
| 3.5.3 | 32.5์ด |
| 3.7.5 | 35.9์ด |
| ๋ง์คํฐ | 29.9์ด |
์์ ๊ฒ์ํ ๋ฌธ์ ์ค ์ผ๋ถ๋ ์ฌ์ ํ ์ด๋ ค ์์ง๋ง ๊ธฐ๋ณธ์ ์ผ๋ก 3.5 perf(์ด ๋ฒค์น๋งํฌ์ ๊ฒฝ์ฐ)๋ก ๋์๊ฐ๋๋ค. ๋ถ๋ช ํ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋๋ฆฌ์ง๋ง ๋ค์ ๋ณ๊ฒฝ ์ฌํญ์ material-ui ์ชฝ์ ์์ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
ํ ์คํธ ์ค์ํธ์์ 3.8.1์ ํ ์คํธํ์ผ๋ฉฐ 3.2.4๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ฒ์ ๋งํผ ๋น ๋ฅธ ๊ฒ ๊ฐ์ต๋๋ค(3.7์ ์๋นํ ๋๋ฆผ).
์์งํ ๋งํด์, ๋๋ ์ฐ๋ฆฌ๊ฐ ์๋ก์ด ๊ธฐ๋ฅ์ ํฌ๊ธฐํ์ง ์๊ณ ์ผ๋ง๋ ๋ง์ ์ฑ๊ณผ๋ฅผ ๋์ฐพ์ ์ ์์๋์ง ๋ฏฟ์ ์ ์์ต๋๋ค. :smile: ์ข ๋ ์ฌ์ ๊ฐ ์์ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค(์: https://github.com/microsoft/TypeScript/pull/36754). ํ์ง๋ง ๊ฐ์ฅ ์ํฅ๋ ฅ ์๋ ๋ณ๊ฒฝ์ CSSProperties ์ ํ์ ๋จ์ํ์ผ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋น์ ์ ๊ทธ๋ค๊ณผ ํจ๊ป ๋ ๊ธฐํ๊ฐ ์ ํ ์์์ต๋๊น? ์ ์ด๋ ์ผ๋ถ ์ฌ์ฉ์(์: @embeddedt)๋ ์ฑ๋ฅ ํฅ์์ ๋ํ ๋๊ฐ๋ก ์ผ๋ถ ์ ํ ๊ฒ์ฌ๋ฅผ ๊ธฐ๊บผ์ด ํฌ๊ธฐํ ๊ฒ ๊ฐ์ต๋๋ค.
์ ์ด๋ ์ผ๋ถ ์ฌ์ฉ์(์: @embeddedt)๋ ์ฑ๋ฅ ํฅ์์ ๋ํ ๋๊ฐ๋ก ์ผ๋ถ ์ ํ ๊ฒ์ฌ๋ฅผ ๊ธฐ๊บผ์ด ํฌ๊ธฐํ ๊ฒ ๊ฐ์ต๋๋ค.
TS ํ์ ๋๊ตฐ๊ฐ๊ฐ ์ต๊ทผ์ ๋ ์๊ฒฉํ ์ ํ์ ์ํ๋ ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ๋ ๋์จํ ์ ํ์ ์ํ๋ ์ฌ์ฉ์๊ฐ ์๋ค๊ณ ํธ์ํ์ง ์์์ต๋๊น? :์๋ค:
๋์๊ฒ ๊ทธ๊ฒ์ ์ ํ ๊ฒ์ฌ์ ๊ดํ ๊ฒ์ด ์๋๋๋ค(๋ธ๋ผ์ฐ์ devtools๋ CSS๋ฅผ ๊ฒ์ฌํ๋ ํจ์ฌ ๋ ๋์ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์์ต๋๋ค). ์๋ ์์ฑ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ค์ํฉ๋๋ค.
๋๋ ๋ค๋ฅธ "๋ฒ์ "์ ๊ฐ์ง๊ณ ๋๊ณ ๊ทธ๋ค์ด ์ด๋ป๊ฒ ํ๋์ง ๋ณผ ๊ฒ์ ๋๋ค.
@amcasey CSSProperties (styled-components์์ CSSObject๋ผ๊ณ ํจ)์ ์ฌ๊ท์ ํน์ฑ์ด ์ฃผ์ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๊ทธ๋ค์ ์ฑ๋ฅ์ด ์ฐ๋ฆฌ๋งํผ ๋์ ๊ฒ์ ๋๋ค. https://github.com/eps1lon/mui-types-perf/pull/6 ๋ฐ ๋ฒค์น๋งํฌ ๋ก๊ทธ๋ฅผ ์ฐธ์กฐ ํ์ญ์์ค .
์ฐ๋ฆฌ๊ฐ ์ํํ๋ "๊ณผ๋ถํ"์ ์์ ๋ ๋ง์ ๋ฌธ์ ๊ฐ ์์ ์ ์์ต๋๋ค. styled-components
๋ ์ฝํฌ ๋ฒ์ ๊ณผ ๊ฐ ์์ฑ์ด ์ฝํฌ๊ฐ ๋๋ ๊ฒ์ ํ์ฉํ๋ ๋์ ์ ์ ๊ฐ์ฒด๋ง ํ์ฉํฉ๋๋ค. ํ์คํ์ง ์์ต๋๋ค.
์ ํ ์๋ช ์ ๋จ์ํํ๊ณ ์ถ์ง๋ง(๊ฐ๋ฐ์๊ฐ ์ดํดํ๊ธฐ ์ฌ์ด IMO์ด๊ธฐ ๋๋ฌธ์) JSS ๊ตฌํ๊ณผ ์ผ์นํ๋๋ก ๋ช ์์ ์ผ๋ก ์์ฒญ๋ฐ์์ต๋๋ค. ์ด์ ์ง์ํ๋ฏ๋ก ์ฝ๊ฒ ๋กค๋ฐฑํ ์ ์์ต๋๋ค. ํนํ ์ด๋์ด 20% ์์ญ์ ์๋ ๊ฒฝ์ฐ. ๋๋ ๊ทธ๊ฒ์ด ํ์์ ์ ๋นํํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
์ ํ์ ์กฐ๊ฑด๋ถ๋ก ๋ ์ ํํ๊ฒ ๋ง๋ค ์ ์์ต๋๊น(์ฌ์ฉ์ ์ค์ ์ ๋ฐ๋ผ)? ์ด๋ ๊ธฐ์กด ์ฝ๋๋ฅผ ์์์ํค์ง ์์์ผ ํ๋ฉฐ(๊ธฐ๋ณธ์ ์ผ๋ก ์ค์ ์ด ํด์ ๋ ์ ์๊ธฐ ๋๋ฌธ์) ๋ณต์กํ ์ ํ์ด ํ์ํ์ง ์์ ๋์ ๊ฐ์ ์ฌ์ฉ์๊ฐ ์ฑ๋ฅ ํฅ์์ ๋น ๋ฅด๊ฒ ํ์ธํ ์ ์์ต๋๋ค.
๋ณต์กํ ์ ํ์ด ํ์ํ์ง ์์ ์ฌ์ฉ์๊ฐ ์ฑ๋ฅ ํฅ์์ ๋น ๋ฅด๊ฒ ํ์ธํ ์ ์์ต๋๋ค.
๋์ ๋๋ ์ฐจ์ด๋ฅผ ์ป์ ์ ์๋์ง์กฐ์ฐจ ํ์ธ๋์ง ์์์ต๋๋ค. ๋๋ 15%์ ์ฑ๋ฅ ์น๋ฆฌ๋ฅผ ๋ณด์์ง๋ง ์ด๊ฒ์ด ์ธ์ ๊ฐ๋ฅํ์ง ์์ฌ์ค๋ฝ์ต๋๋ค.
๋ด๊ฐ ๋ณผ ์์๋ "์ฌ์ฉ์ ์ค์ "์ ์ค์นํ ๋ ํจํค์ง๋ฅผ ํจ์นํ๋ ๊ฒ์ ๋๋ค. ์ฌ๋ฌ ๋ฒ์ ์ ํ์ดํ์ ์ ์งํ ์ ์๋ ๋์ญํญ์ด ์์ต๋๋ค.
@eps1lon ์ฃ์กํฉ๋๋ค. ์ ์ง๋ฌธ์ด ๋ช
ํํ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. ๋๋ CSSProperties
๊ฐ ๊ด์ฐฎ๋ค๊ณ ์๊ฐํฉ๋๋ค. (๋ฌผ๋ก ๋ ์์ผ๋ฉด ๋ ๋น ๋ฅผ ๊ฒ์
๋๋ค) - ์ค์ ๋ก https://github.com/mui-org ์์ ํ์ ์ ํ์ ๋จ์ํํ ์ฌ์ง๊ฐ ์๊ธฐ๋ฅผ ๋ฐ๋์ต๋๋ค. ์ด ์ ํ ์ any
๋ณ๊ฒฝ ํ๋ฉด ์๋ฃ ํ์๊ฐ ์ค์ด๋ค ๊ฒ์
๋๊น?
ํธ์ง: ๋ด ์์์์ ์ด๋ ๊ฒ ํ๋ฉด docs
ํ๋ก์ ํธ๋ฅผ 15% ๋ ๋น ๋ฅด๊ฒ ์ปดํ์ผํ ์ ์์ง๋ง(29.7์ด์์ 25.5์ด๋ก) ํธ์ง ํ๊ฒฝ์ ๋ฏธ์น๋ ์ํฅ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
ํธ์ง 2: ์ค์ ๋ก ์ ํ์ ์ฌ๊ท ๋ถ๋ถ์์ ์ ๊ธฐ๋ฅผ ํฌ๊ธฐํ๋ฉด BaseCreateCSSProperties
์ฌ์ฉํ ์ ์์ผ๋ฉฐ ๋ค๋ฅธ ์์ฑ์ any
์ ํ์ ๊ฐ๊ฒ ๋ฉ๋๋ค(์ฆ, CSS ์์ฑ์ ์ค์ ์ ํ).
ํธ์ง 3: ํธ์ง 2๋ ๊ณผ๋ํ ์์ฑ ๊ฒ์ฌ๋ก ์ธํด ์๋ํ์ง ์์ต๋๋ค(์ฆ, ์์์ ์์ฑ ์ด๋ฆ์ ๊ฐ์ฒด ๋ฆฌํฐ๋ด์์ ํ์ฉ๋์ง ์์).
์๋ฃ ๋ ์ ํ ๊ฒ์ฌ์ ๋ํ ๊ทํ์ ์์ ์ ์ผ๋ถ ์ ํ ์์ฑ์๊ฐ ๊ทธ๋ ๊ฒ ๋๋ ์ ์๋ค๋ ๊ฐ์ค์ด ์์๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ํฅ๋ฏธ๋ก์ ์ต๋๋ค. @DanielRosenwasser "a" | "b" | string
ํจํด์ ์์ฉํ๊ธฐ ์ํด ์ด์ ๊ฐ์ ์์
์ ์ํํ ๊ฒ ๊ฐ์ต๋๋ค.
๋ํ styled-components
์๋ ๋ฐ์ ํ๊ฒ ๊ด๋ จ๋ ๊ฒ์ฌ๊ธฐ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์ ํ์ ๋ณด๋ค ์ ํํ๊ฒ ์ง์ ํ ์ ์๋ ๊ฒ๊ณผ ๊ด๋ จํ์ฌ https://github.com/microsoft/TypeScript/issues/36782๋ฅผ ์ ์ถํ์ต๋๋ค
emotion
์ด(๊ฐ) ๊ฐ์ ๋ณดํธ์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ค๋ ๋ด ํ๋ก์ ํธ์ Material UI( 4.9.4
)๋ฅผ ์ถ๊ฐํ๊ธฐ ์์ํ๋๋ฐ ์๋๊ฐ ๋๋ฌด ๋๋ ค์ ๋ด ํ๋ก์ ํธ์์ ์ฌ์ฉํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค. withStyles()
์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ ์๋ ๊ฐ๋จํ <Slider/>
๊ตฌ์ฑ ์์๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
์ฐ๋ฆฌ๋ IDE์ ์ฆ๊ฐ์ ์ธ TypeScript ํผ๋๋ฐฑ์์ ๋๋๋ก 5-10์ด์ฒ๋ผ ๋๊ปด์ง๋ ๊ฒ์ผ๋ก ์ด์ผ๊ธฐํ๊ณ ์์ต๋๋ค(์ง๊ธ Material UI์ ์ํธ ์์ฉํ์ง ์๋ ์ฝ๋ ๋ถ๋ถ์ ๊ฒฝ์ฐ - ๊ตฌ์ฑ ์์). ์ด๋ฌํ ์ ํ์ ๋ํด ๋ญ๊ฐ ํฌ๊ฒ ์๋ชป๋์์ ๊ฒ์ ๋๋ค(๋๋ ๋๋ฌด ๋ณต์กํฉ๋๋ค). @amcasey ๊ฐ ์ข์ ์กฐ์ฌ๋ฅผ ํ๊ณ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ง๊ธ์ @material-ui
๋ํ ๋ชจ๋ TypeScript ํญ๋ชฉ์ ์ต์ํ ์ ์ธํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ฐพ์ผ๋ ค๊ณ ํฉ๋๋ค(๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ฒด ๋ชจ๋ any
). ํ์ง๋ง TypeScript๋ ๊ทธ๋ ๊ฒ ์ฝ๊ฒ ๋ง๋ค์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
@lostpebble withStyles
๊ฐ ์๋ ๋ค๋ฅธ ๊ฒ์ ์ฌ์ฉํ์ฌ ์ฌ๋ผ์ด๋๋ฅผ ์ฌ์ฉ์ ์ ์ํ ๋๋ ๊ฐ์ ์ผ์ด ๋ฐ์ํฉ๋๊น(์: CSS ๋ชจ๋)?
@lostpebble ํ์ฌ ํน์ ์ ํ ์งํฉ์ ์ ์ธํ๋ ์ง์๋๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ๋น์ ์ด ์ ๋ง๋ก ์ ๋ง๋ก ์ํ๋ค๋ฉด ์คํํ ๊ฒ์ ๊ฒฝ๋ก ๋งคํ์ด ๋ ๊ฒ์
๋๋ค. "@material-ui/*": ["simplemui"]
์ ๊ฐ์ ๊ฒฝ๋ก ๋งคํ์ ์๋ํ ๋ค์ ๋ค์์ ํฌํจํ๋ simplemui.d.ts
๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
declare const x: any;
export = x;
๊ทธ๋ฌ๋ฉด ๋ชจ๋ material-ui ์ ํ์ด ํจ๊ณผ์ ์ผ๋ก any
๋ฉ๋๋ค. ์ด๊ฒ์ ํ์คํ ํดํน์ด๋ฉฐ ๋ด๊ฐ ์ถ์ฒํ ์ ์๋ ๊ฒ์ ์๋์ง๋ง ํธ์ง ๊ฒฝํ์ ์ฐจ๋จํ ์ ์์ต๋๋ค.
๋๋ ์ฐ๋ฆฌ๊ฐ (30% ์์ญ์์) ์ข์ ๊ฐ์ ์ ํ๋ค๊ณ ์๊ฐํ์ง๋ง, ์ง๊ธ ์ฐ๋ฆฌ๊ฐ ํ ์ ์๋ ์ผ์ ํ์ดํ์ ๋ ๋์จํ๊ฒ ๋ง๋๋ ๊ฒ๋ฟ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
์ด๊ฒ์ ์ด๋ค ์๋ชป๋ ์ฝ๋๊ฐ ์ ํ ๊ฒ์ฌ๊ธฐ์ ์ํด ์๋ฝ๋ ์ ์๋์ง์ ๊ฐ์ ๊ตฌ์ฒด์ ์ธ ์ ์์ด ์ ๋์ ์ผ๋ก ํ์ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ฒค์น๋งํนํ๊ณ ์ด๊ฒ์ด ์๋ฏธ ์๋ ์ํน ๋ค์ด๊ฐ ๊ณณ์ธ์ง ํ์ธํด์ผ ํฉ๋๋ค.
์๋์ ์ผ๋ก ๋์ ๋ ํ๊ท๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์๋น์์๊ฒ ์ด๊ฒ์ ์ค๋ช ํด์ผ ํ๊ณ ์ ๋ฐ์ ์ผ๋ก ์๋นํ ์คํธ๋ ์ค๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ ์ ์ง ๊ด๋ฆฌ์์๊ฒ ๋ง์ ์์ ์ ์ถ๊ฐํ๋ค๋ ๊ฒ์ ์ดํดํด์ผ ํฉ๋๋ค.
๋ฐ๋ผ์ ๋๊ตฐ๊ฐ๊ฐ ์คํ ๊ฐ๋ฅํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ ํ ์ด๊ฒ์ ํ์ฌ ๋์๊ฒ ์ฐ์ ์์๊ฐ ์๋๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์์ฃผ ์ ์ ์์ต์ ๋๋ฌด ๋ง์ ์๊ฐ์ ํฌ์ํด์ผ ํฉ๋๋ค.
makeStyles(theme => createStyles(...))
๊ฒฝ์ฐ Record<ClassKey, any>
์์ createStyles(...)
๊ฑฐ์ ~์ ๋ฐ~ (๋ด ์ฝ๋์ ์ปดํจํฐ์์ ์ฝ ~1200ms -> 750ms~ 1400ms โ 1100ms) encodedSemanticClassifications-full: elapsed time
๋ tsserver ๋ก๊ทธ์ ํ์๋ฉ๋๋ค(๋น์ฉ์ด ๋ง์ด ๋๋ ์์
์ ์๋์ง๋ง ์๋ง๋ ์ ํ ๊ฒ์ฌ๊ฐ ์๋ฃ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ ๊ฐ์ต๋๋ค).
export default function createStyles<ClassKey extends string, Props extends {}>(
styles: StyleRules<Props, ClassKey>,
): Record<ClassKey, any>;
createStyles(...)
๋ ์คํ์ผ ๊ตฌ์กฐ๋ฅผ ๊ฒ์ฌํ๋ฏ๋ก makeStyles์ ๋๊ท๋ชจ ํตํฉ ์ธ์ ์ ํ ๋ createStyle์ ๋๊ท๋ชจ ํตํฉ ๋ฐํ ์ ํ์ ๋ํ ์ ํ ๊ฒ์ฌ๋ฅผ ๊ฑด๋๋ธ ์ ์์ต๋๋ค.
~(์ ์ฒด makeStyles ์ฝ๋ ์ฃผ์ ์ฒ๋ฆฌ: 650ms)~
@ypresto createStyles
๋ const
์ด์ค์
์ด ์๋ typescript ๋ฒ์ ์๋ง ํ์ํฉ๋๋ค. ์ฝ๋๋ฒ ์ด์ค์์ { display: 'block' as const }
๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉด(ts >= 3.4) createStyles
.
@eps1lon ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ์์์ฐจ๋ฆฌ๊ณ docs
์์ ์ ํ์ ์๋ํ์ง๋ง ๊ฒฐ๊ณผ๋ ์ธ์์ ์ด์ง ์์์ต๋๋ค.
@eps1lon with const
๋ฐ createStyles
, IntelliSense๋ ๋ ์ด์ ์ปจํ
์คํธ ์ธ์ ํ๋ณด๋ฅผ ํ์ํ์ง ์์ต๋๋ค .cry :
@ypresto ๊ทธ๋์ผ ํฉ๋๋ค. ์์ ์ฝ๋ ์ค๋ํซ์ด ์์ต๋๊น?
@์์ผ์ด์
์ธ๋ถ ๊ฐ์ฒด ๋๋ ์์ฑ์ as const
๋ฅผ ์ถ๊ฐํ๋ฉด ํจ๊ณผ์ ์ผ๋ก ์ข
๋ฃ๋ฉ๋๋ค. ๋๋ ๋ชจ๋ ๋ถ๋์ฐ์ ๊ทธ๊ฒ์ ๋ฐฐ์นํ๊ณ ์ถ์ง ์์ต๋๋ค.
const useStyles = makeStyles(theme => ({
root: {
// no IntelliSense
}
} as const))
๋ํ createStyles๊ฐ ์์ผ๋ฉด ๋ฌธ์์ด ์์ฑ์ ์ฝ๊ฐ์ ์ ํ์ด ์์ต๋๋ค.
const useStyles = makeStyles(theme => ({
root: {
direction: '|', // no IntelliSense at | (works with createStyles)
direction: | // IntelliSense works at |
}
}))
@ypresto "์ฃฝ์ธ๋ค"๋ ๋ง์ " createStyles
์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์๋ํ๊ฒ ํจ"์ ์๋ฏธํฉ๋๊น?
์ด๋์๋ ๋๋ ๊ฒ์ ํ๋ค์ง๋ง createStyles
์ด๋์๋ ๋๋ ๊ฒ๋ณด๋ค ๋ ๋๋ฆฌ๋ ๊ฒ์ ์์ต๋๋ค.
@amacleay ๋๋ kills IntelliSense
: ๊ธฐ๋:.
์ฃ์กํฉ๋๋ค, ๊ทํ์ ์๊ฒฌ์ ๋์ณค์ต๋๋ค. ํ ๋ฒ ํด๋ณด๊ฒ ์ต๋๋ค.
์ด์ ๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง ํฅ๋ฏธ๋กญ๊ฒ๋ ์ด๊ฒ์ 1100ms โ 750ms์ ๋๋ค.
export const DropArea: React.FC<CardProps & {
active?: boolean
description: string
icon?: React.ReactNode
-}> = ({ active, description, icon, children, ...props }) => {
+}> = ({ children, ...props }) => {
const classes = useStyles()
+ const active = false
+ const icon: React.ReactNode = null
+ const description = ''
return (
<Card {...props} className={clsx(classes.root)} variant="outlined">
FC์์ CardProps &
๋ฅผ ์ ๊ฑฐํด๋ ๊ฑฐ์ ๋์ผํ ๊ฒฐ๊ณผ์
๋๋ค. ์๋ง๋ CardProps๊ฐ ํฐ HTMLAttributes๋ฅผ ํ์ฅํ๋ PaperProps๋ฅผ ํ์ฅํ๊ธฐ ๋๋ฌธ์ผ ๊ฒ์
๋๋ค.
์
๋ฐ์ดํธ ๋ฐ ์ค์: CardProps๋ฅผ HTMLAttributes<HTMLDivElement>
๊ต์ฒดํ๋ฉด ์๊ฐ๋ ๋จ์ถ๋๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค(์ธก์ ๋์ง ์์).
๋ง์ง๋ง์ผ๋ก ๊ฐ์ฅ ํฐ ๊ฒ์ ์ฐพ์์ต๋๋ค. 750ms โ 130ms:
๋ ๊ฐ์ ํ์ดํฌ๊ทธ๋ํผ์์ style={...}
์ ๊ฑฐ.
-<Typography variant="subtitle2" component="div" noWrap style={{ width: '26ch' }}>...</Typography>
+<Typography variant="subtitle2" component="div" noWrap>...</Typography>
-<Typography variant="caption" component="div" noWrap style={{ width: '20ch' }}>...</Typography>
+<Typography variant="caption" component="div" noWrap>...</Typography>
ํ์ง๋ง ์? <div>
๊ฐ์ ์คํ์ผ์ ์ถ๊ฐํด๋ ์ฑ๋ฅ์ด ์ ํ๋์ง ์์ต๋๋ค. OverridableComponent
๋๋ฌด ๋ณต์กํ๊ฑฐ ์๋๊น์..?
(์ ๋ TypeScript 3.8.3, @material-ui/core
4.9.1์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค)
Material-UI๊ฐ ๊ตฌ์ฑ ์์์ ๋ก์ปฌ ์คํ์ผ์ ์ฒ๋ฆฌํ๋ AFAIK ๋ฐฉ์์ React๊ฐ HTML ์์๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์๊ณผ ๋ค๋ฆ ๋๋ค.
@embeddedt ์ ํ ์์ค์์ div์ ์คํ์ผ ์ํ๊ณผ ๋์ผํ React.CSSProperties
ํด์๋ฉ๋๋ค.
@ypresto ์ ์ ํฉ๋๋ค. ์ฃ์กํฉ๋๋ค.
์๋
ํ์ธ์ ์ฌ๋ฌ๋ถ, ์ด์ ๋ํ ์ ๋ฌธ์ ๋ฅผ ์ฌ๋ ๊ฒ์ด ๊ฐ์น๊ฐ ์๋์ง ํ์คํ์ง ์์ผ๋ฏ๋ก ์ ํ ์ ํ์ฑ/์ฑ๋ฅ๊ณผ ๊ด๋ จ์ด ์์ผ๋ฏ๋ก ์ฌ๊ธฐ์ ๊ฒ์ํ๊ฒ ์ต๋๋ค. ๋์ ๋ฌธ์ ๋ฅผ ์ด์ด์ผ ํ๋์ง ์๋ ค์ฃผ์ธ์.
์ฌ์ฉ์ ์ ์ ๊ธ๊ผด์ ์ถ๊ฐ ํ๊ธฐ ์ํด
Type 'string' is not assignable to type 'FontFaceFontDisplayProperty'
csstype
2.6.9 ์
๋ ฅ์ด ์ ํจํ๊ณ ๋ค๋ฅธ ์์ฑ์ ์ ์์ด๊ธฐ ๋๋ฌธ์ ์ด์ํฉ๋๋ค(MUI 4.9.5 ์ฌ์ฉ).
const sourceSansPro = {
fontFamily: "'Source Sans Pro'",
fontStyle: "normal",
fontDisplay: "swap", // won't work
fontWeight: 400,
src: `
url('/static/fonts/Source_Sans_Pro/SourceSansPro-Regular.ttf') format("truetype")
`
};
ํ ๋ง ์์ฑ:
overrides: {
MuiCssBaseline: {
"@global": {
"@font-face": [sourceSansPro]
}
}
์ ํ์ type FontFaceFontDisplayProperty = "auto" | "block" | "fallback" | "optional" | "swap";
@eric-burel ์ด๊ฒ์ typescripts์ ์๋ ์ ํ ํ์ฅ ๋ฌธ์ ์ ๋๋ค. ๋ ธ๋ ฅํ๋ค
- fontDisplay: "swap", // won't work
+ fontDisplay: "swap" as "swap",
๋๋ถ์ ์๋ํ๊ณ "์ ํ ํ์ฅ"์ด๋ผ๋ ์๋ก์ด ๊ฐ๋
์ ๋ฐฐ์ ์ต๋๋ค :) ์๋ฅผ ๋ค์ด fontStyle
๊ฐ ์ํฅ์ ๋ฐ์ง ์๋๋ค๋ ๊ฒ์ด ์ด์ํฉ๋๋ค. ์ด๊ฑฐํ์ผ๋ก ์ ์๋ ์ ์ผํ CSS ์์ฑ์ด ์๋๋ผ ์ฒ์์ผ๋ก ์ด๊ฒ์ ์ณค์ ๋ .
ํธ์ง: ์ข์, ์ ๋ฌธ์ํ๋์ด ์์ต๋๋ค: https://material-ui.com/guides/typescript/#using -createstyles-to-defeat-type-widening
๋ง์ง๋ง์ผ๋ก ๊ฐ์ฅ ํฐ ๊ฒ์ ์ฐพ์์ต๋๋ค. 750ms โ 130ms:
๋ ๊ฐ์ ํ์ดํฌ๊ทธ๋ํผ์์
style={...}
์ ๊ฑฐ.-<Typography variant="subtitle2" component="div" noWrap style={{ width: '26ch' }}>...</Typography> +<Typography variant="subtitle2" component="div" noWrap>...</Typography> -<Typography variant="caption" component="div" noWrap style={{ width: '20ch' }}>...</Typography> +<Typography variant="caption" component="div" noWrap>...</Typography>
ํ์ง๋ง ์?
<div>
๊ฐ์ ์คํ์ผ์ ์ถ๊ฐํด๋ ์ฑ๋ฅ์ด ์ ํ๋์ง ์์ต๋๋ค.OverridableComponent
๋๋ฌด ๋ณต์กํ๊ฑฐ ์๋๊น์..?(์ ๋ TypeScript 3.8.3,
@material-ui/core
4.9.1์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค)
์ด๊ฒ์ด ๋น๋ ์๊ฐ์ ์ํฅ์ ๋ฏธ์น๊ฑฐ๋ Intellisense๊ฐ ์ ์ฉํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์๋ง ์ํฅ์ ๋ฏธ์น๋ค๋ ๊ฒ์ ์์์ต๋๊น? ๋น๋ ๋ฌธ์ (๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ)๊ฐ ๋ฐ์ํ๊ณ ์ผ๋ถ TS ์ฝ๋์๋ ๊ตฌ์ฑ ์์์ ๋ง์ style={someStyle}
์ค์ ๋์ด ์์ต๋๋ค. ๊ทธ๊ฒ์ด ์ฐ๋ฆฌ ๋ฌธ์ ์ ์ผ๋ถ์ธ์ง ๊ถ๊ธํฉ๋๋ค.
@yatrix7 , ์ผ๋ฐ์ ์ผ๋ก ๋งํ์๋ฉด ์ด๋ฌํ ๊ธด ๊ฒ์ฌ ์๊ฐ์ด ๋น๋ ๋ฐ ํธ์ง๊ธฐ ์๋ต ์๊ฐ์ ๋ชจ๋ ์ํฅ์ ๋ฏธ์น ๊ฒ์ผ๋ก ์์ํฉ๋๋ค.
๋๋ ํ์ฌ ์ด๊ฒ์ ์กฐ์ฌํ๊ณ ์๋ ์ฌ๋์ด ์์ต๋๊น? ์ด์ ๋ฒ์ ์
๊ทธ๋ ์ด๋์์ typescript ์ ํ ํ์ธ ์๊ฐ๊ณผ ๊ด๋ จํ์ฌ ๋ช ๊ฐ์ง ๊ฐ์ ์ฌํญ์ด ์๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฌ์ ํ ๋๋ฆฝ๋๋ค.
์ด๊ฒ์ ๋ํด ์ค์ค๋ก ์กฐ์ฌํ๋ ๊ฒ์ ๊บผ๋ฆฌ์ง ์์ ๊ฒ์
๋๋ค.
์ด๊ฒ์ ๋ํด ์ค์ค๋ก ์กฐ์ฌํ๋ ๊ฒ์ ๊บผ๋ฆฌ์ง ์์ ๊ฒ์ ๋๋ค.
์ ๋ง ๋๋จํฉ๋๋ค. ํ์ฌ ์์ ํ ์ ์๋ ์คํ ๊ฐ๋ฅํ ํญ๋ชฉ์ด ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ณ๋ชฉ ํ์์ ๋ํ ํฌ์ธํฐ๋ฅผ ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
์กฐ์ฌ์ ๋์์ด ๋๋๋ก ํ์ฌ ๋ช ๊ฐ์ง ๋ฒค์น๋งํน์ ์ถ๊ฐํ์ต๋๋ค. https://github.com/mui-org/material-ui/pull/22110
@FabianKielmann TS ์ชฝ์์ ๋๋ ๋จธํฐ๋ฆฌ์ผ UI์ ์ ์ฉํ ์ ์์ ๋งํผ ๊ณง ์ฑ์ํ๊ธฐ๋ฅผ ๋ฐ๋ผ๋ ์ฑ๋ฅ ์กฐ์ฌ ๋๊ตฌ๋ฅผ ์์ ํด ์์ต๋๋ค.
์ด๊ฒ์ ์๊ฐ์ ํ ์ ํ๋ค๋ฉด https://github.com/microsoft/TypeScript/issues/38583 ๊ณผ ๊ฐ์ ๊ฒ์ ์๋ํด ๋ณผ ์๋ ์์ต๋๋ค
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ค๋ ๋ด ํ๋ก์ ํธ์ Material UI(
4.9.4
)๋ฅผ ์ถ๊ฐํ๊ธฐ ์์ํ๋๋ฐ ์๋๊ฐ ๋๋ฌด ๋๋ ค์ ๋ด ํ๋ก์ ํธ์์ ์ฌ์ฉํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.withStyles()
์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ ์๋ ๊ฐ๋จํ<Slider/>
๊ตฌ์ฑ ์์๋ฅผ ์ถ๊ฐํ์ต๋๋ค.์ฐ๋ฆฌ๋ IDE์ ์ฆ๊ฐ์ ์ธ TypeScript ํผ๋๋ฐฑ์์ ๋๋๋ก 5-10์ด์ฒ๋ผ ๋๊ปด์ง๋ ๊ฒ์ผ๋ก ์ด์ผ๊ธฐํ๊ณ ์์ต๋๋ค(์ง๊ธ Material UI์ ์ํธ ์์ฉํ์ง ์๋ ์ฝ๋ ๋ถ๋ถ์ ๊ฒฝ์ฐ - ๊ตฌ์ฑ ์์). ์ด๋ฌํ ์ ํ์ ๋ํด ๋ญ๊ฐ ํฌ๊ฒ ์๋ชป๋์์ ๊ฒ์ ๋๋ค(๋๋ ๋๋ฌด ๋ณต์กํฉ๋๋ค). @amcasey ๊ฐ ์ข์ ์กฐ์ฌ๋ฅผ ํ๊ณ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ง๊ธ์
@material-ui
๋ํ ๋ชจ๋ TypeScript ํญ๋ชฉ์ ์ต์ํ ์ ์ธํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ฐพ์ผ๋ ค๊ณ ํฉ๋๋ค(๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ฒด ๋ชจ๋any
). ํ์ง๋ง TypeScript๋ ๊ทธ๋ ๊ฒ ์ฝ๊ฒ ๋ง๋ค์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.