īŧ18128ãŽ@ eps1lonã§ææĄãããĻãããããĢãããŽåéĄã¯ãMaterial-UIãŽåæåŽã¨ãįšãĢįˇ¨éä¸ãĢãããããã§ãã¯ããæéãįį¸ŽãããããĢį°ĄįĨåã§ããããŠãããč°čĢããå ´æã¨ããĻäŊæããĻããžãã
æãæŖįĸēãĒåīŧæéĢãŽã¨ãŠãŧã¨ã¨ããŖãŋãŧãŽåŽäēãæäžããīŧã¨éĢéãĒåãã§ãã¯īŧãšãã¯ããĢãŽé įĢ¯ãany
īŧãæã¤ãã¨ãŽéãĢã¯å¸¸ãĢįˇåŧĩéĸäŋããããžãã
https://github.com/microsoft/TypeScript/issues/34801ãŽãããĒåéĄã¯ãMaterial-UIããããŠãŧããŗãšãåãæģããããĢãæŖįĸēããįˇŠåãããã¨ã§æŠæĩãåããå¯čŊæ§ããããã¨ãį¤ēåããĻã
ãããžã§ãĢčĒŋæģããåįžãããå¤ããŽéåēĻäŊä¸ã¯ãå¤æ°ãŽ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īŧããããŽããã°čĒäŊã¯å帰įã§ãããããã¨ãčŋŊå ãŽãŦã¤ã¤ãŧã1ã¤ã ãã§ããīŧ ã¤ãžãã width
ããfoo.width
ããããã¨ãfoo.bar.width
ãĢį§ģåããžããīŧ ãŦããĢã1ã¤ãããĒãå ´åã¯ããŋã¤ããåį´åããã¨ãããŧãĢãĢåįžã4.6į§ãã3.6į§ãĢįį¸Žãããžãīŧã¤ãžãã大ããĒååŠīŧã
bīŧčĒåã§ãŋã¤ãããããŖãĻãŋãĻã BaseCSSProperties[keyof BaseCSSProperties]
ããč¯ãããŽãæãäģããã¨ãã§ããžããany
ããããããĢč¯ãã ãã§ãã
3īŧ StyleRules
ããããããŖããĒãå ´åã¯ã CSSProperties
ãžãã¯() => CSSProperties
īŧãããããĩãŗã¯ãããCSSPropertiesãã¨åŧãļãã¨ãĢããžãīŧãŽãããããååžããžããããã¯įãĢããĒãŖãĻããžã- CSSProperties
ã¯æ æ°ãããããžããã ãããããŖãããå ´åã¯ãæåŗãŽããCreateCSSProperties<Props>
īŧ CSSProperties
č¨įŽãĢProps
ãåŋ
čĻãĢãĒãå ´åããããžãīŧãžãã¯(props: Props) => CreateCSSProperties<Props>
ãããããååžããžããäēåŽä¸ãããĢãŦã¤ã¸ãŧãĒãŽã§įč§Ŗã§ããžããã Props
ä¸åēĻæ¸ĄããĻCreateCSSProperties
ãååžããæŦĄãĢããä¸åēĻæ¸ĄããĻåã
ãŽãããããŖãååžããžãã ãĒãããããĢãĩãŗã¯ããĒãŽã§ããīŧ
ããã¨ã¯åĨãĢãį§ã¯įãŖãĻããžããã 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ããããŠãĻãļãĢåãæŋããĻããããšãčŖ
éŖžãããŠãŗãčŖ
éŖžããįĸēčĒã§ããžããããããšãå¤æã
- [...]
ããããŽããã°čĒäŊã¯å帰įã§ãããããã¨ãčŋŊå ãŽãŦã¤ã¤ãŧã1ã¤ã ãã§ããīŧ
äŊŋį¨ããĻããCSS-in-JSãŊãĒãĨãŧãˇã§ãŗãįĸēčĒããåŋ
čĻããããžãã æčĄįãĢã¯ãCSSãŽãĄããŖãĸã¯ã¨ãĒã¯å帰įãĢãĒãå¯čŊæ§ããããžãã į§ã¯ããŽå帰æ§ãåæ¸ãããŦããŧããåãåãããŠãããįĸēčĒãããã¨æããžãã æčĄįãĢããšãããããĄããŖãĸã¯ã¨ãĒã¯ã and
æŧįŽåãäŊŋį¨ããĻããŠããåã§ããžãã ãã ãã2ã¤ãŽãŦããĢãĢåļéããåŋ
čĻããããžãã1ã¤ã¯ãĄããŖãĸã¯ã¨ãĒį¨ã§ããã1ã¤ã¯įäŧŧãģãŦã¯ãŋãŧį¨ã§ãã ããã¯ãžã ãŋã¤ããã§ãã¯ãããIMOã§ããåŋ
čĻããããžãīŧ
const styles = {
root: {
'<strong i="18">@media</strong> (max-width: 12cm)': {
':hover': {}
}
}
}
ããã¯ããĒãã@oliviertassinariãæ¸ããĻãããŽãčĻãããŽã§ããīŧ
- [...]
CSSProperties-ãžãã¯īŧpropsīŧPropsīŧ=> CreateCSSPropertiesãããã¯äēåŽä¸ãããĢãŦã¤ã¸ãŧã§ããããįč§Ŗã§ããžããã§ãããããããã1åæ¸ĄããĻãCreateCSSPropertiesãååžããĻãããããä¸åēĻåã ãŽãããããŖãååžããåŋ čĻããããžãã ãĒãããããĢãĩãŗã¯ããĒãŽã§ããīŧ
åŧæ°čĒäŊããããããŖããã°ã§ã¯ãĒãéĸæ°ã§ããå ´åã¯ãããŧããåŋ čĻã§ãã ãšãŋã¤ãĢã¯ã2ã¤ãŽį°ãĒãį¨ŽéĄãŽãããããŖããã°ãĢäžåããå¯čŊæ§ããããžããããŧãīŧ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ãæäžãããĄãĒãããĢ寞ããĻéĢããããã¨ããžã åŽč¨ŧããĻããžããã ãã ãããĄãĒãããããããããĒãå¯čŊæ§ããããŽã§ãããŖã¨čããĻãŋãĻãã ããã
ãããäŊŋį¨ããã1ã¤ãŽãąãŧãšããããžãīŧ
æ¤č¨
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
ãŠãŽãããĒãšãŋã¤ãĢãŽããã°ãæ¸ĄãããããįĸēčĒããåŋ
čĻããããžãã ãšãŋã¤ãĢããã°ã§äŊŋį¨ãããĻããå°éå
ˇãŽį¨ŽéĄãæ¨æ¸ŦãããããŽããĢããŧããã§ãĢããžãã ãšãŋã¤ãĢããã°ãéįã§ããå ´åãã¤ãžãTSã{}
ãŋã¤ããæ¨æ¸Ŧããå ´åã æŦĄãĢã IsEmptyInterface
ãäŊŋį¨ããĻå°éå
ˇãŽæ¨åŽãŋã¤ããįĸēčĒããä¸æšãŽããŠãŗããĢã¯0ããŠãĄãŧãŋãŧãŽåŧãŗåēãįŊ˛åãäŊŋį¨ããããä¸æšãŽããŠãŗããĢã¯ãæ¨åŽå°éå
ˇãŋã¤ããĢįãã1ããŠãĄãŧãŋãŧãŽåŧãŗåēãįŊ˛åãäŊŋį¨ããžãīŧ StylesRequireProps
ãããŗStylesHook
åį
§ããĻãã ããã
ã¤ãžãã useStaticStyles({})
ãžãã¯useStaticStyles(null as any)
ã¨æ¸ãåŋ
čĻã¯ããuseStaticStyles({})
ã https://github.com/mui-org/material-ui/issues/14018ãéãããããĢhttps://github.com/mui-org/material-ui/pull/14019ã§å°å
Ĩãããžãã
ããŽãæŠčŊããŽåéĄã¯ãä¸į´ãĻãŧãļãŧãįįąãįč§ŖããĻããã°ã null as any
ãäŊŋį¨ããĻãåéĄããĒããã¨ã§ãã ããļããįŠēãŽãĒãã¸ã§ã¯ããæ¸Ąããã¨ãããåŋ
čĻã§ã¯ãĒããŽãĢ大ä¸å¤Ģã§ãã ãã ããMaterial-UIãžãã¯TypeScriptãĢæ
ŖããĻããĒãå ´åã¯ãé常ãĢæˇˇäšąããã¤ãŠã¤ãŠããžãã įšãĢãšãŋã¤ãĒãŗã°ãŽãģã¨ããŠã¯ã¨ãĢããå°éå
ˇãĢåēãĨããĻããĒããŽã§ã
ãģã¨ããŠãŽå ´åããŋã¤ããã§ããĢãŧã¯ãšãŋã¤ãĒãŗã°ãŊãĒãĨãŧãˇã§ãŗã§å ããããĻããããã§ããīŧ ãŗãŗããŧããŗããŽåŧãŗåēãįŊ˛åãã¤ãžãããģã¨ããŠãŽå ´åãĢãŠãŽå°éå ˇãäŊŋį¨ã§ããããæåž ããĻããžããã
ããå¤ããŽãĒãã¸ããĒãã¯ããŧãĢããĻã withStyles
ãžãã¯makeStyles
äŊŋį¨įļæŗãå
ˇäŊįãĢčĒŋãšããã¨ãã§ããžãã ãããžã§ãŽã¨ãããå°éå
ˇãŽäŊŋį¨æŗã ããčĻãĻããžããã
ããã¯ããĒãã@oliviertassinariãæ¸ããĻãããŽãčĻãããŽã§ããīŧ
@ eps1lonãŗãŧãããŧãšãĢããŽããšããããã¤ãįēįããĻããžãīŧãã¨ãã°ã <strong i="8">@media</strong> (hover: none)
īŧã ãã ãããŗãĸãŗãŗããŧããŗãã§ã¯ãããģãŠé ģįšã§ã¯ãããžããã åããĻãŧãļãŧãŠãŗãã ã¨æããžãã ããã¯ééããĒãããŦãŧããĒããŽä¸é¨ã§ããå¯čŊæ§ããããžãã
@beholderrk
BaseCSSProperties[keyof BaseCSSProperties]
ãããã¨ã§ããããããã¨ãããšãĻãŽãããããŖãĢäēææ§ãŽãããŋã¤ãããããã¨ã¯äēåŽã§ãã ãã¨ãã°ãCSSã§äŊŋį¨ã§ãããããããŖãname: string
ã¨width: number
ãžãã 严æšãŽãããããŖã§æŠčŊããã¤ãŗããã¯ãšįŊ˛åãæåŽãã1ã¤ãŽæšæŗã¯ãããšãĻãŽãããããŖãstring | number
ããã¨č¨ããã¨ã§ãã ããã¯į´ æ´ããããã¨ã§ã¯ãããžãã- name
ãnumber
width
ãĒããã¨ã¯ãĒãã string
ãĒããã¨ããããžãã-ããããããã¯æŠčŊããžãã æŦåŊãŽåéĄã¯ãããĒããæãããŽãåŽéãĢ襨įžã§ããĒããã¨ã§ãīŧå°ãĒãã¨ããį§ããĄãå¤æã§ããéãã§ã¯ããããčĄããåˇ§åĻãĒãããã¯ããããããããžããīŧã ããĒãã¯åŽéãĢããĒããŽãŋã¤ããname: string
ã width: number
ãžãã¯x: CSSProperties
åĢãã§ããã¨č¨ãããã§ããããã§x
ã¯name
ãžãã¯width
-æŦ ããĻãããŽã¯ãäģĨå¤ãŽããŽãã§ãã ãããããå°ãæįĸēãĢãĒããã¨ãéĄãŖãĻããžããæŖ常ãĒããŧãšãŠã¤ãŗã¯é常ãĢåŊšįĢãĄãžãã ããĒãã¯ããžããžãĒãŗã¯ãæãŖãĻããžããīŧ
įˇ¨éīŧãããčĻã¤ããžããã
@ eps1lonäŧ芹ãĢåå
isEmptyInterface
ãĢéĸããĻããããããŖããŠãĄãŧãŋãīŧãã¨ãã°īŧ useStaticStyles
ãĒããˇã§ãŗãĢãããã¨ã¯ã§ããžããīŧ įēäŋĄč
ãæåž
ãŠãããĢããããįįĨã§ããã¨ããæåŗã§ã¯ããããģãŠæŖįĸēã§ã¯ãããžãããããŋã¤ããã§ãã¯ãŽæšãã¯ãããĢåŽäžĄã§ãã į§ãč¨ãŖããããĢãį§ã¯ããĒããŽãããĢæ°åãäŊããæãŖãĻããžãã-ããã¯į§ãŽå´ãŽåãĒãæļæ¸Ŧã§ãã
2īŧbīŧãĢã¤ããĻãŠãæããžããīŧ ããŽãŋã¤ãã¯ãåēæŦįãĢããšãĻãŽãããããŖåãåãå Ĩããããæģããŋã¤ãã¯å¤ããŽããŽãŽ1ã¤ãĢãĒãå¯čŊæ§ããããã¨ãį¤ēããĻãããããããžã䞥å¤ããĒãããã§ãã
isEmptyInterfaceãĢéĸããĻã¯ããããããŖããŠãĄãŧãŋãīŧãã¨ãã°īŧuseStaticStylesããĒããˇã§ãŗãĢãããã¨ãã§ããžããīŧ
æåãĢåŧãŗåēããˇã°ãããŖããĒãŧããŧããŧãããĻåŽé¨ãããããåŊąéŋãä¸ããããŠãããįĸēčĒãããã¨æããžãã æŦĄãĢã常ãĢãĒããˇã§ãŗãĢãããã¨ã§ãéŗãå°ãĒãããĻãŋãžãã ãģã¨ããŠããšãĻãŽãĻãŧãšãąãŧãšã§1åããåŧãŗåēãããĒããããé常ãããéŗãå°ãĒãããæšãåŽå ¨ã ã¨æãããžããããŽãããééãã1åã ãčĄãå¯čŊæ§ãéĢãããããĢ襨į¤ēãããžãã ãããį§ããĄãĢå¤ããŽãããŠãŧããŗãšããããããĒããã°ããããåŖ˛ããŽã¯éŖããã§ãããã å ãŽåéĄį¨ãĢäŊæããããĒãã¸ããĒīŧhttps://github.com/microsoft/TypeScript/issues/34801#issue-514055289īŧãäŊŋį¨ããžãã
2īŧbīŧãĢã¤ããĻãŠãæããžããīŧ ããŽãŋã¤ãã¯ãåēæŦįãĢããšãĻãŽãããããŖåãåãå Ĩããããæģããŋã¤ãã¯å¤ããŽããŽãŽ1ã¤ãĢãĒãå¯čŊæ§ããããã¨ãį¤ēããĻãããããããžã䞥å¤ããĒãããã§ãã
čĒ¤ãŖãĻãšãããããžããã IsEmptyInterfaceãŽåŽé¨ãŽåžã§ãããčĻãĻãããžãã
@ eps1lonåŽå
¨ãĢåæããžã-ãããæé¤ãããã¨ãåŽčŗĒįãĒãããŠãŧããŗãšãŽååŠã§ã¯ãĒãå ´åã¯ã isEmptyInterface
įļæããžãã
īŧ19320ã§ã¯ãéĸæ°ãŽãĒãŧããŧããŧããåããã¨ãéæããããã¤ããŽč¤éãĒæĄäģļåãåãé¤ããžããīŧ IsEmptyInterface
ã¨ããŧãĢčĢįåãåé¤ããžããīŧã ãŗãŧããå°ãĒãäģĨå¤ãĢãããžãåžãããĒããŖãããã§ããã
įžå¨ãTS3.2.4ã¨3.7.4ãŽéãčĄãŖããæĨããããĻãããã¨ãäģãå ãããã¨æããžãã į§ããĄãŽãŋã¤ããŽããšããšã¤ãŧãã¯ã3.2.4ã¨æ¯čŧããĻ3.7.4ã§50īŧ é ãåŽčĄãããžãīŧã90s寞50sīŧã
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ãŽã¨ãŠãŧãįēįããžãã į§ã¯äŊãééãŖãĻãããŽã§ããīŧ ããããĄã¤ãĒãŗã°ãŽįŽįã§ãåįžã1åãŽtscåŧãŗåēããĢãžã§ä¸ãããã¨ã¯é常ãĢåŊšįĢãĄãžãã
@amcasey yarn typescript
ã¯ãŗãŗãã¤ãĢã§ã¯ãĒããåãŽããšãã§ãã DefinitelyTypedãĒãã¸ããĒã§äŊŋį¨ãããĻããããŽã¨åæ§ãŽč¨åŽãäŊŋį¨ããĻããžãã packages/*
å
ãŽTypeScriptããĄã¤ãĢã¯ããģã¨ããŠãŽå ´åãåæ ŧãžãã¯ä¸åæ ŧãŽããããã§ãããšããŧããĄãŗããŽéãžãã§ããã $ExpectError
ããŖããããžãã
skipLibCheck: true
ã¨noEmit: true
ã./docs/tsconfig.json
čŋŊå ããåžã yarn workspace docs run tsc -p tsconfig.json
ãäģããĻãããĨãĄãŗãã§tsc
ãäŊŋį¨ãããŽãæč¯ãŽãåŽéãŽãããšããąãŧãšã ã¨æããžãã ./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æįĸēãĢããĻãããĻãããã¨ãã tslintãé ããĒãŖããã¨ãĢããããããĻããžããããä¸åēĻãĢ1ã¤ãŽå¤æ°ãĢįĻįšãåŊãĻããã¨æããžãã ææĄãããããĨãĄãŗãããĢããããžããžãĒããŧã¸ã§ãŗãŽtypescriptã§åŽčĄããäŊããéŖãŗåēãããŠãããįĸēčĒããžãã ãããã¨ãīŧ
ããŽč¨åŽã¯åŽį§ã§ãã ãã§ãã¯æéã3.3ã¨3.4ãŽéã§2åãĢãĒãŖãĻããžãã
| ããŧã¸ã§ãŗ| æéãįĸēčĒãã|
|-|-|
| 3.2 | 16.71į§|
| 3.3 | 16.79s |
| 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ããããŽæ°å¤ã¯ãåããŧã¸ã§ãŗã§ãŽ1åãŽåŽčĄãĢããããŽã§ãããããããããããĒããŽãã¤ãēããããžãã ããããį§ã¯æãä¸ããĻãäŊããčĻã¤ãããã¨ãã§ããããŠãããįĸēčĒããžãã
Linux VMã§ããį´ããã¨ããã3.7ã¯3.5ãããä¸č˛ĢããĻ20ã25īŧ é ããĒããžããã
åãããĢããŽéŖįļåŽčĄã¯į´5īŧ å¤åãã3.5ã¨3.6ãŽéãžãã¯3.6ã¨3.7ãŽéãŽåˇŽã¯ãããį´10īŧ ã§ããããããããäēåãããŽã¯é常ãĢéŖãããã¨ãč¨ŧæãããĻããžãã
į§ãæ°äģããįããããã¨ãŽ1ã¤ã¯ã styled-components
ãTS> = 3.7ãĢ寞ããĻååĨãŽ.d.tsããĄã¤ãĢãæäžãããããæ¯čŧããĒãŗã´ã¨ãĒãŗã´ã§ã¯ãĒãå¯čŊæ§ããããã¨ã§ãã
éŠãããã¨ãĢãæ°ããstyled-components
ãŋã¤ããŽæšãéĢéã§ãããããĢčĻããžãã ãã ãããĒãŗã´ã¨ãĒãŗã´ãæ¯čŧããã¨ãčĒŋæģã厚æãĢãĒããžãã
čŗĸãč§Ŗæąēįãæãã¤ããĒããŖããŽã§ãããŧã¸ãĢãããŗãŗãã¤ãĢæãŽããŧã¸ãããããããĻããšãã¤ã¯ãæĸããžãã ææĨã¯æ°åãæŦ˛ããã§ãã
@amcaseyãããčĒŋæģãããããĢããĒããŽåĒåãĢæčŦããžãīŧ TSããŧã ãŽãĄãŗããŧã¨ãããĒãĸãĢUIãä¸įˇãĢæŠčŊããĻãããŽãčĻããŽã¯æŦåŊãĢį´ æ´ãããã§ãã į§ã¯ããŽGithubãŽåéĄãĢééããMaterial UIã§ãŽã¨ããŖãŋãŧãŽã¨ã¯ãšããĒã¨ãŗãšãé常ãĢé ãįįąãįč§Ŗãããã¨ããžããīŧ2ã¤ãŽããã¸ã§ã¯ãã§äŊŋį¨ããĻããžãīŧã VsCodeå ãŽã¤ãŗããĒãģãŗãšã¨ãĻãŧãļããĒããŖãĢããĒã大ããĒåŊąéŋãčĻãããĻãããã¨ãæįĸēãĢįĸēčĒã§ããžãã
ããŽæįšã§ã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/c5e6d95e930048a033868d72440a9296904a33ecã§ãŽįšåŽãŽãšãã¤ã¯ãåĢãžã
ä¸æåžåã¯į˛žæģãĢčããĻãããäŊããããåŧãčĩˇããå¯čŊæ§ããããŽãââį§ãĢã¯ããããžããã ããļããéĸæŖįãĒæ¸éã¯é常ãĢæĨčŋããĻãããŽã§ããã¤ãēãããããåä¸ãŽæ˛įˇãŽãããĢčĻããžãã
ãŗããããã¨ãĢæ大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īŧ ãŽå˛åŧããåããããžããã "ã
įˇ¨éīŧãĒãŗã¯ãæ´æ°ããžããã į§ã¯æéãéĄãŖãĻãããŽã§ãæˇˇäšąããåå帰ãŽ_å_ãĢããŧã¸ãŽããŠã°ãįĢãĻãžããã
@ eps1lonããŽ@ts-ignore
ãåé¤ããã¨åŊšįĢã¤ãããããĒãã¨ææĄããžããã åēæŦįãĢãã¨ãŠãŧãæ¤åēãããå ´åããĻãŧãļãŧãŽæåĒå
äēé
ã¯ã¨ãŠãŧãĢéĸããéŠåãĒæ
å ąãååžãããã¨ã§ããã¨æŗåŽããããããå¤ããŽčŋŊå äŊæĨãčĄãããå¯čŊæ§ããããžãã ããŽåžãããŽæ
å ąãåé¤ãããå ´åīŧ @ts-ignore
īŧãããŽæéã¯įĄé§ãĢãĒããžãã īŧæŽåŋĩãĒãããã¨ãŠãŧãæ¤åēããåŋ
čĻããĒããã¨ãæ¤åēãããŽã¯į°Ąåã§ã¯ãããžãããīŧåĨãŽæĻįĨã¯ããŗãŗãã¤ãŠãæåĨãč¨ããŽãããããžã§ãæį¤ēįãĒåãĸãĩãŧãˇã§ãŗīŧ any
ãåĢãīŧãčŋŊå ãããã¨ã§ãã
@ eps1lonããŽ
@ts-ignore
ãåé¤ããã¨åŊšįĢã¤ãããããĒãã¨ææĄããžããã
docs/
äŊŋį¨ã¯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ãŊãĒãĨãŧãˇã§ãŗãŽãšãŋã¤ãĒãŗã°ãĢéĸããĻã¯ãžãŖããæ°ããã§ãããå æããŽãšãŦãããéããĢããŠããŧããĻããĻãæŊå¨įãĒåéŋįãĢã¤ããĻãŽäēēã ãŽčããčããĻčåŗããããžãããå°ãĒãã¨ãįæįãĢã¯ã
ä¸é¨ãŽãĻãŧãļãŧīŧį§čĒčēĢã1äēēīŧã¯ãįĩãŋčžŧãŋãŽãšãŋã¤ãĒãŗã°ãˇãšãã ãå¤į¨ããĒãããåŽå ¨ãĢåéŋããĻããã¨æããžãã ããã¯ä¸ģãĢãããŦãŧãŗãĒCSSãžãã¯SassãĢį˛žéããĻããĻãJSãšãŋã¤ãĒãŗã°ãˇãšãã ãåšæįãĢäŊŋį¨ããæšæŗãæãä¸ããæéãããžããĒãããã§ãã į§ã¯čĒåãŽã¯ãŠãšåãäŊæããåĨãŽãšãŋã¤ãĢãˇãŧãããĄã¤ãĢãäŊæããReactãŗãŗããŧããŗãå ã§ã¯ãŠãšåãäŊŋį¨ããĻįļčĄãããã¨ãåĨŊãŋãžãã åēæŦįãĢãį§ã¯ããŦãŧãŗHTMLãæ¸ããĻããããŽãããĢãšãŋã¤ãĢãč¨åŽããžãã
ããã¯č¨ãŖãĻãããšãŋã¤ãĒãŗã°ãˇãšãã ãŽéĢ䞥ãĒé¨åãŽåãã§ãã¯ããĒããĢããããŠã°ãčŋŊå ãããã¨ã¯å¯čŊ/åŽį¨įã§ããīŧããããtype CSSProperties = any
ãããĒãã¨ãæĄäģļäģãã§čĄããã¨ãĢããŖãĻīŧīŧ ãšãŋã¤ãĢãˇãšãã ãäŊŋį¨ããĻããäēēã¨äŊŋį¨ããĻããĒãäēēãŽæ°ãŽįĩąč¨ã¯ããããžããããåŽéãĢã¯ãããģãŠåŽŗã¯ãĒãã¨æããžãīŧããŽããŠã°ãč¨åŽããããŋã¤ããŗã°ãããšããããããĢãã§ãã¯ãčŋŊå ãããå ´åīŧ ããããĻããã¯ãĻãŧãļãŧãŽå°ãĒãã¨ã1ã¤ãŽãģã°ãĄãŗããŽãããŠãŧããŗãšãæšåãããããŽčŋ
éãĒæšæŗã§ãã
ä¸čŦįãĒčãæšãĢč¨åããããŖãã ãã§ãã ãæ°čģŊãĢæåĸããĻãã ããã īŧslightly_smiling_faceīŧ
@embeddedtä¸čŦįãĢãäŊããany
ã¨ããĻæį¤ēįãĢããŧã¯ãããã¨ã¯ãããŽãˇãŗããĢãŽåãã§ãã¯ãįĄåšãĢããč¯ãæšæŗã§ãã ããã¯č¨ãŖãĻããåãŽåŽŖč¨ãåãĢåŖããã¨ãã§ãããŽããããã¨ããããĒããį¤ēåãããããĢãéč¤ããåŽŖč¨ãŽåéĄãåéŋãããããĢãŗãŗãã¤ãŠãŽãĩããŧããåŋ
čĻãĒãŽããæãåēããžããã
æ°ããæ°å¤īŧį°ãĒãããˇãŗãį°ãĒãæéãĄããĒãã¯īŧīŧ
| ããŧã¸ã§ãŗ| åč¨æé|
|-|-|
| 3.5.3 | 32.5į§|
| 3.7.5 | 35.9į§|
| ããšãŋãŧ| 29.9į§|
ä¸č¨ã§æį¨ŋããåéĄãŽããã¤ãã¯ãžã æĒč§Ŗæąēã§ãããåēæŦįãĢ3.5ãããŠãŧããŗãšãĢæģãŖãĻããžãīŧããŽããŗãããŧã¯ãŽå ´åīŧã æãããĢãããã§ãį§ããĄãæããããã¯ãããĢé ãã§ãããæŦĄãŽå¤æ´ãŽãããã¯ãããĒãĸãĢ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ã¨į¸äēäŊį¨ããĻããĒããŗãŧããŽé¨åãĢã¤ããĻã¯ãäŊŋį¨ããããĄã¤ãĢã§ãŽåŽå ¨ãĒTypeScriptãŽéåēĻäŊä¸īŧãŗãŗããŧããŗãīŧã ããããŽãŋã¤ãīŧãžãã¯ãé常ãĢč¤éãĒãŋã¤ãīŧãĢã¯ãäŊããå¤§åš ãĢééãŖãĻããåŋ čĻããããžãã @ amcaseyãããã¤ããŽéŠåãĒčĒŋæģãčĄãŖãĻããããã§ããããŽ
å°ãĒãã¨ãäģãŽã¨ãã@material-ui
ããšãĻãŽTypeScriptãŽããŽãé¤å¤ã§ããæšæŗãčĻã¤ãããã¨ããĻããžãīŧåēæŦįãĢãĸã¸ãĨãŧãĢå
¨äŊãany
īŧ-ããããTypeScriptã¯ãããååãĢį°ĄåãĢã§ããĒãããã§ãã
@lostpebble withStyles
äģĨå¤ãŽããŽãäŊŋį¨ããĻãšãŠã¤ããŧããĢãšãŋãã¤ãēããĻãåããã¨ãčĩˇãããžããīŧCSSãĸã¸ãĨãŧãĢãĒãŠã§ããīŧ
@lostpebbleįžå¨ãįšåŽãŽãŋã¤ããŽãģãããé¤å¤ãããããŽãĩããŧããããĻããæšæŗã¯ãããžããã æŦåŊãĢãæŦåŊãĢãããããŽã§ããã°ãåŽé¨ãããŽã¯ããšããããŗã°ã§ãã "@material-ui/*": ["simplemui"]
ãããĒããšããããŗã°ãčŠĻããĻãããæŦĄãåĢãsimplemui.d.ts
ãäŊæã§ããžãã
declare const x: any;
export = x;
ãããĢãããããšãĻãŽãããĒãĸãĢ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ãŽargument-type-of-massive-unionã¨createStylesãŽreturn-type-of-massive-unionãŽåãã§ãã¯ããšãããã§ããžãã
ãīŧãããĻmakeStylesãŗãŧãå ¨äŊããŗãĄãŗããĸãĻãããīŧ650msīŧã
@ypresto createStyles
ã¯ã const
ãĸãĩãŧãˇã§ãŗãŽãĒãtypescriptããŧã¸ã§ãŗãĢãŽãŋåŋ
čĻã§ãã ãŗãŧãããŧãšã§{ display: 'block' as const }
ãäŊŋį¨ã§ããå ´åīŧts> = 3.4īŧã createStyles
ãčļ
ããĻäŊŋį¨ããžãã
@ eps1lonãããĢæ°ãĨãã docs
åãæŋããčŠĻãŋãžããããįĩæã¯å°čąĄįã§ã¯ãããžããã§ããã
@ eps1lonãĢconst
ããã createStyles
ããĒãå ´åãIntelliSenseã¯ãŗãŗãããšãčĒčåčŖã襨į¤ēããĒããĒããžãīŧcryīŧ
@yprestoããããšãã§ãã ãĩãŗããĢãŽãŗãŧããšããããã¯ãããžããīŧ
@amcasey
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ãPaperPropsãæĄåŧĩããPaperPropsã大ããĒHTMLAttributesãæĄåŧĩããããã§ãã
æ´æ°ã¨éčĻīŧ CardPropsãHTMLAttributes<HTMLDivElement>
įŊŽãæããã¨ãæéãįį¸Žããããã¨ãããããžããīŧæ¸ŦåŽãããĻããžããīŧã
æåžãĢãæ大ãŽããŽã750msâ130msãčĻã¤ããžããã
2ã¤ãŽãŋã¤ãã°ãŠããŖãã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ããŗãŗããŧããŗããŽããŧãĢãĢãšãŋã¤ãĢãåĻįããæšæŗã¯ã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ããã¯ãtypescriptãŽčĒååæĄåŧĩãĢéĸããåéĄã§ãã čŠĻã
- 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ãčĻã¤ããžããã
2ã¤ãŽãŋã¤ãã°ãŠããŖãã
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ãäŊŋį¨ããĻããžãīŧ
ãããããĢãæéãĢåŊąéŋãããŽããããã¨ãã¤ãŗããĒãģãŗãšãåŊšįĢã¤ãŽãĢãããæéã ããĢåŊąéŋãããŽãããããžãããīŧ ããĢããŽåéĄãįēįãīŧãĄãĸãĒä¸čļŗīŧãä¸é¨ãŽTSãŗãŧããŽãŗãŗããŧããŗããĢ大éãŽstyle={someStyle}
č¨åŽãããĻããžãã ãããį§ããĄãŽåéĄãŽä¸é¨ã§ããããŠããįåãĢæããžãã
@ yatrix7 ãä¸čŦįãĢč¨ãã°ãããããŽéˇããã§ãã¯æéã¯ãããĢãã¨ã¨ããŖãŋãŧãŽä¸ĄæšãŽåŋįæéãĢåŊąéŋãä¸ããã¨æããžãã
į§ã¯įžå¨ãããčĒŋãšãĻããäēēã¯ããžããīŧ äģĨåãŽããŧã¸ã§ãŗãŽãĸããã°ãŦãŧãã§ã¯ãtypescriptãŋã¤ããŽãã§ãã¯æéãĢéĸããĻããã¤ããŽæšåãããŖããã¨ãį§ã¯įĨãŖãĻããžãã ããããããã§ãé
ãã§ãã
ãããčĒåã§čĒŋãšãĻãããžããžããã
ãããčĒåã§čĒŋãšãĻãããžããžããã
ããã¯į´ æ´ãããã§ãããã įžå¨ãį§ããĄãåãįĩããšãåŽį¨įãĒé įŽãčĒčããĻããžããã ããããŖãĻããããĢããã¯ã¸ãŽãã¤ãŗãŋãããã ããã°åš¸ãã§ãã
čĒŋæģãĢåŊšįĢã¤ãããĢãäģãŽã¨ããããã¤ããŽããŗãããŧã¯ãčŋŊå ããžããīŧ https īŧ
@FabianKielmann TSå´ã§ã¯ãį§ã¯ãããŠãŧããŗãščĒŋæģããŧãĢãĢåãįĩãã§ããžãããããã¯ããããĢæįããĻãmaterial-uiãĢéŠį¨ã§ãããããĢãĒããã¨ãéĄãŖãĻããžãã
ãããĢæéãč˛ģããæéãããã°ã httpsīŧ//github.com/microsoft/TypeScript/issues/38583ãŽãããĒããŽãčŠĻããã¨ãã§ã
æãåčãĢãĒããŗãĄãŗã
äģæĨãããã¸ã§ã¯ããĢMaterial UIīŧ
4.9.4
īŧãčŋŊå ãå§ããžããããéåēĻãé常ãĢé ããããããã¸ã§ã¯ãã§äŊŋį¨ãããã¨ããã§ããĒãã¨æããžããwithStyles()
ãäŊŋį¨ããĻãĢãšãŋãã¤ãēãããåį´ãĒ<Slider/>
ãŗãŗããŧããŗããčŋŊå ããžãããį§ããĄã¯ãIDEã§ãŽåŗæãŽTypeScriptããŖãŧãããã¯ãããæã 5ã10į§ãŽãããĢæããããŽãĢį§ģčĄãããã¨ã芹ããĻããīŧįžå¨ãMaterial UIã¨į¸äēäŊį¨ããĻããĒããŗãŧããŽé¨åãĢã¤ããĻã¯ãäŊŋį¨ããããĄã¤ãĢã§ãŽåŽå ¨ãĒTypeScriptãŽéåēĻäŊä¸īŧãŗãŗããŧããŗãīŧã ããããŽãŋã¤ãīŧãžãã¯ãé常ãĢč¤éãĒãŋã¤ãīŧãĢã¯ãäŊããå¤§åš ãĢééãŖãĻããåŋ čĻããããžãã @ amcaseyãããã¤ããŽéŠåãĒčĒŋæģãčĄãŖãĻããããã§ããããŽ
å°ãĒãã¨ãäģãŽã¨ãã
@material-ui
ããšãĻãŽTypeScriptãŽããŽãé¤å¤ã§ããæšæŗãčĻã¤ãããã¨ããĻããžãīŧåēæŦįãĢãĸã¸ãĨãŧãĢå ¨äŊãany
īŧ-ããããTypeScriptã¯ãããååãĢį°ĄåãĢã§ããĒãããã§ãã