TypeScript ๋ฒ์ : 3.2.0-dev.20181004
๊ฒ์์ด:
disableJsDiagnostics
JSX
์ฝ๋ ์์
์ด ์ค๋ฅ ๋ฉ์์ง ๋ฌด์
๋ชจ๋ ์ค๋ฅ ๋ฉ์์ง์ '@ ts-ignore'์ถ๊ฐ
์ํธ
// MyComponent.jsx
// @ts-check
import React from "react";
class MyComponent extends React.Component {
render() {
return (
<div>
// @ts-ignore
{doesNotExist}
</div>
);
}
}
export default MyComponent;
Ignore this error message
๋๋ Add '@ts-ignore' to all error messages
์ฝ๋ ์์ ์ ์คํํ๋ฉด ์ปดํ์ผ๋ฌ๋ฅผ ์ถฉ์กฑํ๋ // @ts-ignore
๊ฐ ์ฝ์
๋ฉ๋๋ค.
๊ทธ๋ฌ๋,
<div>
// @ts-ignore
{doesNotExist}
</div>
์ค์ ๋ก // @ts-ignore
๋ ๋๋ง๋ฉ๋๋ค.
์์๋๋ ๋์ :
{/* @ts-ignore */}
๋๋ {/* // @ts-ignore */}
์ด ์ ํจํ ๋ฌด์ ์ฃผ์์ผ๋ก ์ธ์๋์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ๋์ ์ ๊ฐ ์๊ฐ ํด๋ผ ์์๋ ์ต์ ์ ๋ฐฉ๋ฒ์
<div>
{/*
// @ts-ignore */}
{doesNotExist}
</div>
์ค์ ํ๋ :
// MyComponent.jsx
// @ts-check
import React from 'react';
class MyComponent extends React.Component {
render() {
return (
<div>
// @ts-ignore
{doesNotExist}
</div>
);
}
}
export default MyComponent;
// @ts-ignore
์ค์๋ก ๋ ๋๋ง๋ฉ๋๋ค.
๊ด๋ จ ๋ฌธ์ :
์ฐธ๊ณ : ์ ์ต์ ์์ (์ : ์ธ๋ผ์ธ)์ ์ถ๊ฐํ์ง ์๋ ํ, ์ ํจํ ์ต์ ์์น๋ฅผ ์์ฑ ํ ์ ์์ ๋ ๋น ๋ฅธ ์์ ์ ๋นํ์ฑํํ๋ ๊ฒ์ด ์ ์ผํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋๋ค.
(์ฐ๋ฆฌ๊ฐ ์ ๋ง๋ก ๋ญ๊ฐ๋ฅผ ์๊ฐํ์ง ์๋ ํ
{/*
// @ts-ignore */}
๊ด์ฐฎ์?)
์๋ก์ด ์ต์ ์์์ ์ถ๊ฐํ๊ณ ํน์ ์ค๋ฅ๋ฅผ ๋์์ผ๋ก ์ง์ํ๋ ๊ฒ๋ ๋ฉ์ง ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ด ์์ผ๋ฉด JSX ๊ตฌ์กฐ์ ์ค๋ฅ๋ฅผ ๋ฌด์ํ ์์๋ ๊ธฐ๋ฅ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ์ด์ํ ์ฃผ์ ์์์ ์ฌ์ฉํ ๊ฒ์ ๋๋ค. ์์์ง๋ ์์ง๋ง ์๋ํ๋ ์ ์ผํ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์ ์์ ์ (1)์ด ์์์ ํฌํจํ๊ฑฐ๋ (2) ์ ํ ํฌํจํ์ง ์์ ์ ์์ต๋๋ค (๊ทธ๋ฌ๋ฏ๋ก ๋ ๋๋ง์ด ๋๋์ง ์์). ๊ธฐ๋ฅ์ ์ผ๋ก ์ ํํ๊ธฐ ๋๋ฌธ์ ์์์ง๋ ์์ง๋ง (1)์ ์ข์ํฉ๋๋ค. ๊ท์น์ด JSX ๊ตฌ์ฑ ์์ ๋ณธ๋ฌธ์ ์ค๋ฅ๋ฅผ ์ ์ธํ ๋ชจ๋ ๊ฒ์ ๋ฌด์ํ ์ ์๋ค๋ฉด ๊บผ์ ธ ๋ณด์ผ ๊ฒ์ ๋๋ค. ๋ํ ํ ํ๋ฆฟ ๋ฌธ์์ด์ ์ด์ํ ๋ฌด์ ์ฃผ์์ ๋ํ ์ ๋ก๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด
const s = `
Hello ${doesnotexist}`;
์์ ๋ฌด์๋ฉ๋๋ค
const s = `
Hello ${
// @ts-ignore
doesnotexist}`;
{/* // @ts-ignore */}
๊ต์ฅ ๐น
๋ค๋ฅธ ์ฌ๋๋ค์ด ์ฌ์ฉํ๋ ๋ค๋ฅธ ํจํด์ด ์์ต๋๊น?
์ด๊ฒ์ ์ ๋ง ์ด์ํ ๊ตฌ๋ฌธ์ ๋๋ค.
{/*
// @ts-ignore */}
์์ ํธ์ง์ ์ค์ ๋ก ์๋ํ์ง ์์ต๋๋ค.
์ฌ๋๋ค์ ์ค๋๋ TSX
ํ์ผ ๋ด์์ typescript ์ค๋ฅ๋ฅผ ์ด๋ป๊ฒ ๋ฌด์ํ๊ณ ์์ต๋๊น? ๋ง์ ์ฐ๊ตฌ๋ฅผ ์ํํ์ง๋ง ์๋ํ๋ ๋จ์ผ ์๋ฃจ์
์ ์ฐพ์ ์ ์์ต๋๋ค. ์ผ๋ถ ์ง์ ์ ๋ฌด์ํ ์ ์๋ค๋ ๊ฒ์ ํฐ ๋์ ์
๋๋ค.
์๋ํ๋ ๋ ๋ค๋ฅธ (์ด์ํด ๋ณด์ด๋) ๋ณํ :
<
// @ts-ignore
SomeComponent />
(์ฐ๋ฆฌ๊ฐ ์ ๋ง๋ก ๋ญ๊ฐ๋ฅผ ์๊ฐํ์ง ์๋ ํ
{/* // @ts-ignore */}
๊ด์ฐฎ์?)
์ผ๋ง๋ ๋๋ ํ๋ !!!
์์ ํธ์ง์ ์ค์ ๋ก ์๋ํ์ง ์์ต๋๋ค.
์ค๋๋ ์ฌ๋๋ค์
TSX
ํ์ผ ๋ด์์ typescript ์ค๋ฅ๋ฅผ ์ด๋ป๊ฒ ๋ฌด์ํ๊ณ ์์ต๋๊น? ๋ง์ ์ฐ๊ตฌ๋ฅผ ์ํํ์ง๋ง ์๋ํ๋ ๋จ์ผ ์๋ฃจ์ ์ ์ฐพ์ ์ ์์ต๋๋ค. ์ผ๋ถ ์ง์ ์ ๋ฌด์ํ ์ ์๋ค๋ ๊ฒ์ ํฐ ๋์ ์ ๋๋ค.
Typescript 3.6.2์์ .tsx
์์ ์๋
(์ฐ๋ฆฌ๊ฐ ์ ๋ง๋ก ๋ญ๊ฐ๋ฅผ ์๊ฐํ์ง ์๋ ํ
{/* // @ts-ignore */}
๊ด์ฐฎ์?)
์, ๋ชจ๋ linting ๊ท์น์ ํด๋น ๊ตฌ๋ฌธ์ ๋ํด ๋งค์ฐ ๋ง์กฑํ ๊ฒ์ ๋๋ค.
์ง๊ธ ์ํ : neutral_face :
< // eslint-disable-line react/jsx-tag-spacing
// @ts-ignore
Component/>
prettier๋ ์์ฑ์ ๋ณ๋์ ์ค์ ์ ์งํ๊ณ ์ด์ @ ts-ignore๋ ํ๊ทธ์ ์์์ด ์๋ ์์ฑ ๋ฐ๋ก ์์ ์์นํด์ผํ๊ธฐ ๋๋ฌธ์ ๋ ์๋ป์.
๋ด๊ฐ ๊ฐ์ง ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
{/* lol https://github.com/Microsoft/TypeScript/issues/27552#issuecomment-495830020
// @ts-ignore */ /* prettier-ignore */}
<MyComponent foo={{
a: 'prop',
with: 'lots a',
big: 'object',
that: 'forces',
prettier: 'to wrap',
}}
/>
์ด์ :
{/* lol https://github.com/Microsoft/TypeScript/issues/27552#issuecomment-495830020
// @ts-ignore */}
<MyComponent
foo={{
a: 'prop',
with: 'lots a',
big: 'object',
that: 'forces',
prettier: 'to wrap',
}}
/>
๋ ์๋ป์ง๋ ๊ฒ๋ ๊ณผ๋ํ ์คํ๋ ๋์ ๋ํด ๋ถํํ ์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง
<MyComponent
{...{}/* lol https://github.com/Microsoft/TypeScript/issues/27552#issuecomment-495830020
// @ts-ignore */}
foo={{
a: 'prop',
with: 'lots a',
big: 'object',
that: 'forces',
prettier: 'to wrap',
}}
/>
๋ํ ์๋ํด์ผํฉ๋๊น? ๊ทธ๋ฌ๋ ์ด๋ ์์ ์์ ๋ ์์๊ฒ ๋ฌด์ํ๋ ๊ฒ์ด ๋ ๋์ ์ ํ์ ๋๋ค. jsx ๋ด๋ถ์๋ ์ฃผ์ ์์น์ ๋ํ ์ต์ ์ด ๋ง์ง ์์ต๋๋ค.
์ ์ด๊ฒ์ด ๋ซํ ์์ต๋๊น? ์ฐ๋ฆฌ๋ ์ถ์ ํ ํด๊ฒฐ์ฑ ์ ์ ๋ ํ์ต๋๊น?
๋ค์ ์ด์ด์ฃผ์ธ์ ...
์ฐ๋ฆฌ๋ ์ถ์ ํ ํด๊ฒฐ์ฑ ์ ์ ๋ ํ์ต๋๊น?
๋ค. ํต ํฝ์ค๋ ์ด์ ๋ชป์๊ธด ์ผ์ํฉ๋๋ค. ๋ชจ๋ ๊ถ๋ฆฌ์ ์ํด ์์ธ์ ์ธ ์ฌ๊ฑด์ด๋์ด์ผํ๋ ํ์๊ณผ ๊ด๋ จํ์ฌ "์์๋ค"๋ ๊ฒ์ ๋ฌธ์ ๊ฐ๋์ง ์๋๋ค. ์ฐ๋ฆฌ๋ jsx ๊ตฌ๋ฌธ์ด ํ์ฉํ๋ ๊ฒ์ ์ํด ๊ฝค ์ ๊ฒจ ์์ผ๋ฏ๋ก ์ค์ ๋ก ๊ทธ ์์ฒด์ ๋๋ค.
์ฐ๋ฆฌ๋ ๋ถ๋ช ํ ์ถ์ ํ ํด๊ฒฐ์ฑ ์ ์ ๋ ํ์ง๋ง ...
์ด ๊ณต๊ฐ ์ํ๋ฅผ ์ ์งํ๋ ๋ฐ ํฌํ / ๋์ ํ ์ ์์ต๋๊น? ์์ ์๊ฐ์์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ถ์ง๋ง ํ์ฌ ์๋ฃจ์ ์ด ์ ํธ๋๋ ์ต์ ์ด๋ผ๋ฉด ์๊ฐ์ ๋ญ๋นํ๊ณ ์ถ์ง ์์ต๋๋ค.
๋์ํฉ๋๋ค. ๋ด๊ฐ ์์กดํ๋ ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ต์ ์ฝ๋์ ์๋ชป๋ ์ ๋ ฅ์ด ์๊ธฐ ๋๋ฌธ์ ํ์ฌ ๋ฏธ๋ฃจ๋ ์๋ฃจ์ ์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์ถ์ ํ ์๋ฃจ์ ์ ํ์ฌ ์๋ํ์ง๋ง ๊ฐ๋ฅํ๋ฉด ํ ์ค์ง๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ฌํ๊ฒ๋ jsx์์ ์ฃผ์์ ์ป๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์์ต๋๋ค. {}
์ด๋ด ์ฌ์ผํฉ๋๋ค.
์ด ๊ฐ๋ฅ์ฑ์ ์ถ์ ํ๋ ๋ณ๋์ ๋ฌธ์ ๊ฐ ์์ต๋๊น?
{/* @ts-ignore */}
{whatever}
์ง๊ธ ์ด๋ ค์๋ ๊ฒ ๊ฐ์ต๋๋ค : https://github.com/microsoft/TypeScript/issues/37738
PR ์ฌ๊ธฐ : https://github.com/microsoft/TypeScript/pull/38228 ๐
๋๋ ๊ฐ์ธ์ ์ผ๋ก ์๊ฐํ๋ค
{/* @ts-ignore */}
{whatever}
์ด๋ฅผ์ํ ์ต๊ณ ์ด์ ๊ฐ์ฅ ๋ณดํธ์ ์ธ ์๋ฃจ์ ์ ๋๋ค.
์๋ ์์ ์ง์ ๋๊ตฌ (์์ ๋ฑ)๋ ํดํน์ ๋นํ ์ ์์ต๋๋ค.
๋
ธํธ :
์ด ์๋ฃจ์
์ ์ ์๋ํฉ๋๋ค.
{/*
// @ts-ignore */}
์ด ๋์
<
// @ts-ignore
SomeComponent />
์๋ ์์์ด ์ง์ ๋๊ณ ์ ํจํ์ง ์๊ฒ๋ฉ๋๋ค (์ ์ด๋ ๋ ์์ ์ค์ ์์).
# 38228์ ์ฑ๊ณต์ ๋ฐํ์ผ๋ก 3.9 : tada์ ๋๋ฌํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋๋ ์ด๊ฒ์ด JSX ๋ฌธ์ ์ ๋ ๊ฐ๊น๋ค๊ณ ์๊ฐํ์ง๋ง ์ด๊ฒ์ ํ์ธํ์ญ์์ค.
์ ๋ด๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค ์ด :
import * as React from 'react';
declare var SomeComponentFromLibrary: React.FC<{
children?: React.ReactElement
}>;
declare var MyComponent: React.FC<{
foo: string,
}>;
export default () => (
<SomeComponentFromLibrary>
{/* @ts-expect-error */}
<MyComponent />
</SomeComponentFromLibrary>
)
SomeComponentFromLibrary
๋ณ๊ฒฝํ ์ ์์ผ๋ฉฐ <MyComponent />
์์ฑํ๋ ์ค๋ฅ๋ฅผ ์ต์ ํ๊ณ ์ถ์ต๋๋ค.
๊ทธ๋ฌ๋ SomeComponentFromLibrary
์ ์์์ ๋ค๋ฅธ ์์๋ฅผ ์ถ๊ฐํ๋ฉด children?: React.ReactElement
์ ํ ์ ์ฝ ์กฐ๊ฑด์ด ๊นจ์ ธ ๋ค๋ฅธ ์ ํ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ฝ๋๋ก ๋ณํ๋์ง ์๋ ์ฃผ์์ JSX์์ ์์ฑํ ์ ์์ต๋๊น?
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
(์ฐ๋ฆฌ๊ฐ ์ ๋ง๋ก ๋ญ๊ฐ๋ฅผ ์๊ฐํ์ง ์๋ ํ
๊ด์ฐฎ์?)