TypeScriptλ λ€μμ μν ν λ μ€λ₯λ₯Ό νμνμ§ μμμΌν©λλ€.
κ΅¬μ± μμ μΈλΆ :
const useStyles = makeStyles(styles);
κ΅¬μ± μμ λ΄λΆ :
const {/* stuff */} = useStyles();
useStyles();
ν¨μ νΈμΆμ λ°μ€μ΄ κ·Έμ΄μ Έ μμΌλ©° WebStormμ "TS2554 : 1 κ°μ μΈμλ₯Ό μμνμ§λ§ 0 κ°λ₯Ό μ»μμ΅λλ€."λΌκ³ λ§ν©λλ€. κ·Έ μμ.
| κΈ°μ | λ²μ |
| -------------- | --------- |
| @ material-ui / styles | 3.0.0-alpha.4 |
| λ°μ | 16.7.0-alpha.2 |
| TypeScript | 3.1.1 |
styles
μ κ³ λ° tsconfig.json
ν¬ν¨ ν΄μ£ΌμΈμ. tsc
μ€νν λ μ€λ₯κ° νμλ©λκΉ? IDE ν΅ν©μ λ€λ₯Έ typescript λ²μ μ μ¬μ©νλ κ²½ν₯μ΄ μκΈ° λλ¬Έμ μ΄κ²μ 묻λλ€.
κ΄λ ¨μλ nitpick : μκ°μ΄ μ§λ¨μ λ°λΌ λ³κ²½λ λ²μ λ¬Έμμ΄ react@next
μ νΈν©λλ€. [email protected]
μλ―Ένμ κ²μ
λλ€.
μ λ tsc
μ§μ μ€ννμ§ μκ³ IDEλ₯Ό μ¬μ©νμ¬ TypeScript νμΌμ λ³κ²½ν λλ§λ€ .ts/x
μμ .js/x
μ§μ (μ μ리μ) λ³νν©λλ€.
μ¬μ©μ€μΈ WebStormκ³Ό ν¨κ» λ²λ€λ‘ μ 곡λλ λ²μ μ 3.1.1
μ
λλ€.
λ΄κ° μ¬μ©νλ React λ²μ μ λ°μνλλ‘ OPλ₯Ό μ
λ°μ΄νΈνμ΅λλ€ : 16.7.0-alpha.2
styles
λ³μ :
const styles = {
chart: {
width: '100%',
height: 70,
backgroundColor: '#f9f9f9'
},
}
( styles
μ΄ ν¨μ ( theme => { /* definitions */ }
)λ‘ μ μ λ λ λμΌν λ©μμ§κ° νμλ©λλ€.
tsconfig.json
:
{
"compilerOptions": {
"sourceMap": false,
"target": "ES2017",
"module": "ES6",
"jsx": "react",
"moduleResolution": "Node",
"strictPropertyInitialization": true,
"strictNullChecks": true,
"noImplicitAny": true
}
}
(
styles
μ΄ ν¨μ (theme => { /* definitions */ }
)λ‘ μ μ λ λ λμΌν λ©μμ§κ° νμλ©λλ€.
κ·Έλ¬λ©΄ μ€μ μλ λ¬Έμ κ° μμ΅λλ€. μ½λ°± μ¬μ©μ ν μ€νΈνμΌλ©° μ λλ‘ μλν©λλ€. κ·Έλ¬λ μ μ μ€νμΌ κ°μ²΄λ₯Ό μ¬μ©ν λ μ¬ν κ°λ₯ν λ²κ·Έκ° μμ΅λλ€.
λ¬Έμ λ [email protected]
(μ»΄νμΌλ¬ κ΅¬μ± μ¦λΆ : true) λ° @material-ui/[email protected]
μ‘°ν©μΌλ‘ λ€μ λ°μν©λλ€. κ·Έλ¬λ [email protected]
μμλ μλν©λλ€.
@TeoTN μ κ³
@TeoTN λ¬Έμ λ₯Ό μΌμΌν€λ μ½λλ₯Ό ν¬ν¨ ν΄ μ£Ό
@ eps1lon μ λ²κ·Έλ₯Ό μ¬ννλ μ μ₯μμ λλ€ : TeoTN / mui-ts-bug
λλ λν [email protected]
λ° @material-ui/[email protected]
μ ν¨κ»μ΄ ν°μΌμ μ€λ₯λ₯Ό λ°κ²¬νμ΅λλ€.
[email protected]
μμ μ
κ·Έλ μ΄λ ν μ΄μ λ VS Codeκ° μλ μμ± λ° λꡬ μ€λͺ
μΌλ‘ μΈν΄ λλΌ μΈ μ λλ‘ λ리기 λλ¬Έμ
λλ€.
[email protected]
λ€μ΄ κ·Έλ μ΄λ ν λ makeStyles
μ£Όλ³μ μλ‘μ΄ μ€λ₯κ°μμμ΅λλ€.
Types of property 'main' are incompatible.
Type '{ position: string; top: number; left: number; bottom: number; right: number; }' is not assignable to type 'CSSProperties | ((props: {}) => CSSProperties)'.
Type '{ position: string; top: number; left: number; bottom: number; right: number; }' is not assignable to type 'CSSProperties'.
Types of property 'position' are incompatible.
Type 'string' is not assignable to type 'PositionProperty'. TS2345
9 | }));
10 |
> 11 | const useStyles = makeStyles((theme: Theme) => ({
| ^
12 | main: {
13 | position: 'absolute',
14 | top: 0,
λ€μκ³Ό κ°μ΄ createStyles
μ ν¨κ»μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν μμμμ΅λλ€.
const useStyles = makeStyles((theme: Theme) =>
createStyles({
main: {
position: 'absolute',
top: 0,
μλ§ μΈκΈ ν λ§νΌ κ°μΉλ λ¨μ§μ
λλ€ import { createStyles } from '@material-ui/styles';
λμ μν createStyles
μμ @material-ui/core
typingsμ΄ λ€λ₯΄κΈ°νμ§ μκΈ° λλ¬Έμ.
createStyles
μ [email protected]
λ° [email protected]
λͺ¨λμμ νμνμ§ μμμ΅λλ€.
μ΄ λ¬Έμ λ typescriptμ λ¦΄λ¦¬μ€ ν보μμλ§ λ°μνλ―λ‘μ΄ λ¬Έμ λ₯Ό λ«κ² μ΅λλ€. λΆμμ ν μ’ μμ± λ²μ μ μ§μν μ μμ΅λλ€. μμ λ λ²μ μ Typescriptμμμ΄ μ€λ₯κ° λ€μ λνλλ©΄ μλ‘μ΄ λ¬Έμ λ₯Ό μ μΆνμμμ€.
νμ¬ μ΅μ μμ λ²μ μΈ typescript 3.5.1μ κ²½μ° μ€μ μΈ κ² κ°μ΅λλ€ (material-ui 4μ ν¨κ»).
4.0.2 λ²μ κ³Ό ts 3.5.1μμλ "strictNullChecks": falseλ₯Ό λ΄ tsconfig.jsonμ μΆκ°νμ¬μ΄ μ€λ₯λ₯Ό νΈλ¦¬κ±° ν μ μμ΅λλ€.
4.0.2 λ²μ κ³Ό ts 3.5.1μμλ "strictNullChecks": falseλ₯Ό λ΄ tsconfig.jsonμ μΆκ°νμ¬μ΄ μ€λ₯λ₯Ό νΈλ¦¬κ±° ν μ μμ΅λλ€.
μ΄κ²μ μ°λ¦¬μ νμ΄νμμ μ§μλμ§ μμ΅λλ€ :
μ°λ¦¬μ μ μλ λ€μ tsconfig.jsonμΌλ‘ ν μ€νΈλ©λλ€. λ μ격ν tsconfig.jsonμ μ¬μ©νκ±°λ μΌλΆ λΌμ΄λΈλ¬λ¦¬λ₯Ό μλ΅νλ©΄ μ€λ₯κ° λ°μν μ μμ΅λλ€.
-https :
types/
κ²μ λ λͺ¨λ ν¨ν€μ§λ "strictNullChecks": false
λ‘ ν
μ€νΈλμ§ μμμΌλ©° μ¬μ€μμ΄ κ΅¬μ±μ μ§μνλ ν¨ν€μ§κ° μμμ μλ―Έν©λλ€.
λλμ΄μ. strict : falseλ‘ νλ‘μ νΈλ₯Ό μμνμΌλ©° μ΄μ μ λ λ§μ μ€λ₯λ₯Ό μμ± ν μ μ΄ μμμ΅λλ€.
v3.xκ° μλνκΈ° λλ¬Έμ 4.xλ μλνλ€κ³ κ°μ νμ΅λλ€.
μ΄μ¨λ ,μ΄ λ©λͺ¨λμ΄ λ¬Έμ λ₯Όλ³΄κ³ νλ λ€λ₯Έ μ¬λλ€μκ² λμμ΄ λ μ μμ§λ§ μ κ·Έλ μ΄λμ λν μμμΉ λͺ»ν λΉμ©μ λλ€.
λ΄κ° κΈ°μ΅νλ ν 3.xμλ λ€λ₯Έ λ¬Έμ κ°μμμ΅λλ€. λΉμ μ κ·Έλ€μ λ§λμ§ μμκ±°λ μ΄λ―Έ λΆκ±΄μ ν μ νμ κ°μ‘μ΅λλ€. μ΄ μꡬ μ¬νμ 4.xμμ λμ λμ§ μμμ΅λλ€.
λλ κ±°κΈ°μ μλ€κ³ νμ νκ³ μ΄μ΄ μ’μμ΅λλ€.
κ·Έλ¬λ strict: true
μ μ»΄νμΌλλ μν νλ‘μ νΈλ₯Ό κ°μ Έ μ€λ©΄ λ¨μν strict: false
λ‘ λ€μ§μ΄μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν κ²μΌλ‘ μμνμ§ μμ΅λλ€. λλ λΆκ±΄μ ν μ νμ΄ κ·Έ μν©κ³Ό μ΄λ€ κ΄λ ¨μ΄ μλμ§ μμ§ λͺ»ν©λλ€.
λλ λΆκ±΄μ ν μ νμ΄ κ·Έ μν©κ³Ό μ΄λ€ κ΄λ ¨μ΄ μλμ§ μμ§ λͺ»ν©λλ€.
strictNullChecks: false
ꡬλΆλλ μ νΈλ¦¬ν° μ νκ³Ό κ΄λ ¨μ΄ μμ΅λλ€. μ΄ νλκ·Έκ° μμΌλ©΄ undefined | null
μ any
ν λΉ ν μ μμ΅λλ€. κ·Έλλ ꡬν μΈλΆ μ¬νμ
λλ€.
μ΄ λ¬Έμ λ λ€μ μ΄μ΄μΌν©λλ€!
μ§κΈμμ΄ λ¬Έμ λ₯Ό μ΄λ»κ² ν΄κ²°ν μ μμ΅λκΉ? nullμ μ λ¬νλ©΄ makeStylesμμ 'μ μλμ§ μμ ν΄λμ€λ₯Ό μ°Ύμ μ μμ'μ€λ₯κ° λ°μν©λλ€. λλλ‘ ν΅κ³Ό ν μνμ΄ μλλ° λ¬΄μμ ν΅κ³Όν΄μΌν©λκΉ?
@krazyjakee μλ const c = useStyles({});
@krazyjakee μλ
const c = useStyles({});
κ°μ¬ν©λλ€!
typescript 3.7.5μμμ΄ μ€λ₯κ° λ°μν©λλ€.
μ΄ const c = useStyles({});
μλν©λλ€.
κ·Έλ¬λ κ·Έκ²μ λ¬Έμμ μΌμΉνμ§ μμ΅λλ€.
https://material-ui.com/zh/styles/basics/
FWIW, κ°μ κ²μ λ΄
λλ€. μ¬κΈ°μ κ²μ λ μ μ (https://github.com/mui-org/material-ui/issues/16867)μ strict
λ° strictNullChecks
λ‘ μλνμ§λ§ μ¬μ ν μ£Όμ¬μλ μμ΅λλ€. μ§κΈ const c = useStyles({});
"λ°©λ²"μ
λκΉ?
κ°μ₯ μ μ©ν λκΈ
@krazyjakee μλ
const c = useStyles({});