Definitelytyped: node_modules/@types/react-native/globals.d.ts (36,15): ์ค‘๋ณต ์‹๋ณ„์ž 'FormData'.

์— ๋งŒ๋“  2019๋…„ 02์›” 22์ผ  ยท  85์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: DefinitelyTyped/DefinitelyTyped

๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ๋Œ€์‹  pull ์š”์ฒญ์„ ํ•˜์„ธ์š”.

  • [x] @types/styled-components ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์•˜๋Š”๋ฐ v.4.1.9 ์ดํ›„๋กœ ๋‹ค๋ฅธ ์ถฉ๋Œ ์ข…์†์„ฑ ์ด ์ถ”๊ฐ€๋˜๊ณ (@types/react-native) @types/node ์™€ ์ถฉ๋Œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ปค๋ฐ‹ ์ฐธ์กฐ

  • [x] tsc์˜ ์ตœ์‹  ์•ˆ์ • ๋ฒ„์ „(3.3.3333)์„ ์‚ฌ์šฉํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. https://www.npmjs.com/package/typescript

  • [ ] StackOverflow ์— ์ ํ•ฉํ•˜์ง€ ์•Š์€ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. (์ ์ ˆํ•œ ์งˆ๋ฌธ์ด ์žˆ์œผ๋ฉด ๊ฑฐ๊ธฐ์—์„œ ์งˆ๋ฌธํ•˜์‹ญ์‹œ์˜ค.)
  • [x] [๋ฉ˜์…˜](https://github.com/blog/821-mention-somebody-they-re-notified) ์ž‘์„ฑ์ž( Definitions by: in index.d.ts ) ๋Œ€๋‹ตํ•˜๋‹ค.

    • ์ž‘์„ฑ์ž: @jkillian @Igorbek @Igmat @lavoaster @Jessidhia @eps1lon @flavordaaave

      ์žฌ์ƒ์‚ฐ ๋ฐฉ๋ฒ•:

  • ๋ช…๋ น์œผ๋กœ ๋ฐ˜์‘ ์•ฑ ์ƒˆ๋กœ ์„ค์น˜
    yarn create react-app my-app-ts --scripts-version=react-scripts-ts

  • ์Šคํƒ€์ผ์ด ์ง€์ •๋œ ๊ตฌ์„ฑ ์š”์†Œ ์ถ”๊ฐ€
    yarn add styled-components
    yarn add -D @types/styled-components
  • ThemeProvider๋ฅผ src/index.tsx๋กœ ๊ฐ€์ ธ์˜ค๊ณ  ๋‹ค์Œ์œผ๋กœ ๋ž˜ํ•‘ํ•ฉ๋‹ˆ๋‹ค.
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import {ThemeProvider} from "styled-components";
import App from './App';
import './index.css';
import registerServiceWorker from './registerServiceWorker';

ReactDOM.render(
    <ThemeProvider theme={{}}>
        <App />
    </ThemeProvider>,
  document.getElementById('root') as HTMLElement
);
registerServiceWorker();
  • ๋นŒ๋“œ ๋ช…๋ น ์‹คํ–‰:
    yarn start
  • ์˜ˆ์ƒ ๊ฒฐ๊ณผ:
    ๋ฐ˜์‘ ์•ฑ ๋ณด๊ธฐ
  • ํ˜„์žฌ ๊ฒฐ๊ณผ:

image

lib.dom๊ณผ ์ถฉ๋Œํ•˜๋Š” ๋งŽ์€ ์ •์˜์— ๋”ฐ๋ฅด๋ฉด ๋งŽ์€ ์‹คํŒจ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
image

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์„ค์ • ์ปดํŒŒ์ผ๋ŸฌOptions.types์— ์˜ํ•ด ์ˆ˜๋™์œผ๋กœ ์ˆ˜์ •๋จ

{
  "compilerOptions": {
  ...
    "types": ["react", "jest"]
  }
  ...
}

๋ชจ๋“  85 ๋Œ“๊ธ€

์—ฌ๊ธฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€

@types/react-native๊ฐ€ ์ถ”๊ฐ€๋œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋ฐ˜์‘ ์›น ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ๋Š”๋ฐ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํƒ€์ดํ•‘์„ ์„ค์น˜ํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์„ค์ • ์ปดํŒŒ์ผ๋ŸฌOptions.types์— ์˜ํ•ด ์ˆ˜๋™์œผ๋กœ ์ˆ˜์ •๋จ

{
  "compilerOptions": {
  ...
    "types": ["react", "jest"]
  }
  ...
}

๋‚˜๋„ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์—ฌ๊ธฐ์— ์žˆ์Šต๋‹ˆ๋‹ค.
๋‚ด ํ”„๋กœ์ ํŠธ์— ์—ฌ๋Ÿฌ ์œ ํ˜• ์ •์˜๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ @types/styled-components ์ข…์†์„ฑ์„ ์ด์ „ ๋ฒ„์ „์œผ๋กœ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

tsconfig.json ๋ช…์‹œ์ ์œผ๋กœ ์œ ํ˜•์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ์ข‹์ง€ ์•Š์€ ํ•ด๊ฒฐ์ฑ…์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
์›น์šฉ๊ณผ ๋„ค์ดํ‹ฐ๋ธŒ์šฉ styled-components ์˜ ์œ ํ˜•์„ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ด FormData์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” typescript: 3.3.333 ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” package.json ๋ฐ tsconfig.json

ํŒจํ‚ค์ง€ JSON
"dependencies": { "@material-ui/core": "^3.9.2", "@types/react-loadable": "^5.5.0", "@types/react-router-dom": "^4.3.1", "prettier": "^1.16.4", "react": "^16.8.4", "react-dom": "^16.8.4", "react-loadable": "^5.5.0", "react-router-dom": "^5.0.0", "react-scripts-ts": "3.1.0", "styled-components": "^4.1.3" }, "devDependencies": { "@types/jest": "^24.0.11", "@types/node": "^11.11.3", "@types/react": "^16.8.8", "@types/react-dom": "^16.8.2", "@types/styled-components": "^4.1.12", "eslint": "5.3.0", "eslint-config-airbnb-base": "13.1.0", "eslint-plugin-import": "^2.14.0", "typescript": "^3.3.3333" }

TSCONFIG JSON
{ "compilerOptions": { "baseUrl": ".", "outDir": "build/dist", "module": "esnext", "target": "es5", "lib": ["es6", "dom"], "sourceMap": true, "allowJs": true, "jsx": "react", "moduleResolution": "node", "rootDir": "src", "forceConsistentCasingInFileNames": true, "noImplicitReturns": true, "noImplicitThis": true, "noImplicitAny": true, "importHelpers": true, "strictNullChecks": true, "suppressImplicitAnyIndexErrors": true, "noUnusedLocals": true, "esModuleInterop": true, "types": ["styled-components", "react", "react-dom", "jest"] }, "exclude": [ "node_modules", "build", "scripts", "acceptance-tests", "webpack", "jest", "src/setupTests.ts" ] }

๋‚˜๋„ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ์•ˆ๊ณ ์žˆ์–ด. ๋‹คํ–‰ํžˆ, ๋‚˜๋Š” ๋ฒ„์ „ ์ž ๊ธˆํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ๊ทน๋ณต ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค @types/styled-components ์— 4.1.8

์—ฌ๊ธฐ์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ด์ „ ๋ฒ„์ „์œผ๋กœ ๋กค๋ฐฑํ•˜๊ฑฐ๋‚˜ node_modules์—์„œ react-native๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ์„ค์น˜ ํ›„ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ dom libs์™€ ์ข…์†์„ฑ์ด ์ถฉ๋Œํ•˜๋Š” ๊ฒฝ์šฐ ์›น์—์„œ styled-components๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?!
์ด๊ฑด ๋ฏธ์ณค์–ด!

๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉฐ ๋ชจ๋“  ์ž‘์„ฑ์ž์—๊ฒŒ ์•Œ๋ฆผ์ด ์ „์†ก๋˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์ด ๋‘ ๊ฐ€์ง€๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค: @eps1lon @flavordaaave

@ArthurBito ๋•๋ถ„์— ์ €์ž ๋ชฉ๋ก์ด ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ๋‚˜์—๊ฒŒ๋„ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. @types/react-native๋Š” ์›น ํ”„๋กœ์ ํŠธ์˜ ์ข…์†์„ฑ์ด ๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์œ ํ˜•์€ ๋ถ„๋ฆฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜์žˆ๋Š” ํ•œ ์ด๊ฒƒ์€ 4.1.9๋กœ ์ถœ์‹œ ๋œ #32843์— ์˜ํ•ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋Œ“๊ธ€์ด ์ด๋ฅผ ๋’ท๋ฐ›์นจํ•ฉ๋‹ˆ๋‹ค.

ํ•ด๋‹น ์Šค๋ ˆ๋“œ ์— ์ด ๋ฌธ์ œ๋ฅผ ์–ธ๊ธ‰ ํ–ˆ์Šต๋‹ˆ๋‹ค .

/cc @minestarks

๋ฒ„์ „์„ 4.1.8๋กœ ์ˆ˜์ •ํ•˜๋ฉด ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” PR์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ด์ƒํ•˜๊ฒŒ๋„ ์›น ํ”„๋กœ์ ํŠธ์—์„œ styled-components๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ @types/styled-component ์ž…๋‹ˆ๋‹ค.

my-app git:(master) โœ— npm ls @types/react-native
[email protected] /Users/devniel/dev/electron/my-app
โ””โ”€โ”ฌ @types/[email protected]
  โ””โ”€โ”€ @types/[email protected]

๋ฌธ์ œ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‹ค์Œ ๋‚ด์šฉ์œผ๋กœ .yarnclean ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

@types/react-native

๋ฌธ์ œ ํ•ด๊ฒฐ ๐ŸŽ‰

๋ฐ˜๋…„์ด ์ง€๋‚œ ์ง€๊ธˆ๋„ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์—†์Šต๋‹ˆ๊นŒ?

์ •๋ง ์—…๋ฐ์ดํŠธ๊ฐ€ ์—†๋‚˜์š”???

๋‚ด ์ƒ๊ฐ์— ๊ฐ€์žฅ ์ข‹์€ ํ•ด๊ฒฐ์ฑ…์€ @types/react-native๋ฅผ ํ”ผ์–ด ์ข…์†์„ฑ์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด์ง€๋งŒ ๋‚ด๊ฐ€ ์•„๋Š” ํ•œ types-publisher ๋Š” ํ˜„์žฌ ์ด๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž ์ค‘ ํ•œ ๋ช…์ด ์ œ๊ฐ€ ์‚ฌ์‹ค์ด๊ณ  peerDep์ด ํ•ด๊ฒฐ์ฑ…์ธ์ง€ ํ™•์ธํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์šฐ๋ฆฌ๊ฐ€ ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ฃผ๋ง์— types-publisher์— peerDep ์ง€์›์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ํ• ์• ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ์ƒ๊ฐ์— ๊ฐ€์žฅ ์ข‹์€ ํ•ด๊ฒฐ์ฑ…์€ @types/react-native๋ฅผ ํ”ผ์–ด ์ข…์†์„ฑ์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ , @types/react-native ๊ฐ€ peer dep์ด๋ฉด React Native๊ฐ€ ์•„๋‹Œ ํ”„๋กœ์ ํŠธ์—์„œ @types/styled-components ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ข…์†์„ฑ์œผ๋กœ ์„ ์–ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์ด์ƒ์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด์ƒ์ ์œผ๋กœ @types/react-native ๋Š” React Native๊ฐ€ ์•„๋‹Œ ํ”„๋กœ์ ํŠธ์— ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์ข…์†์„ฑ์œผ๋กœ _์„ ์–ธ_ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

optionalDependency๋กœ ๋งŒ๋“œ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

@paulmelnikow , ๋„ค, ๋งž์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€๋ฅผ ํ˜ผ๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. @types/styled-components ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด @types/react-native ๋ฅผ ์ข…์†์„ฑ์œผ๋กœ ์„ ์–ธํ•  ํ•„์š”๋Š” ์—†์ง€๋งŒ ์„ฑ๊ฐ€์‹  ๊ฒฝ๊ณ ๋ฅผ ๋ฐ›๊ฒŒ ๋˜๋ฏ€๋กœ ๋ฌผ๋ก  optionalDeps ๊ฐ€ ๋” ๋‚˜์€ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค. types-publisher ๋„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋ฐ ํ•œ๋ฒˆ ํ•ด๋ด์•ผ๊ฒ ๋„ค์š”

"@types/styled-components": "4.0.0"์œผ๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์•„๋‹ˆ์š”, ํ•ด๊ฒฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์นดํŽซ ์•„๋ž˜์˜ ๋ฌธ์ œ๋ฅผ ์“ธ์–ด๋‚ด๋ฆฝ๋‹ˆ๋‹ค.

์•„๋‹ˆ์š”, ํ•ด๊ฒฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์นดํŽซ ์•„๋ž˜์˜ ๋ฌธ์ œ๋ฅผ ์“ธ์–ด๋‚ด๋ฆฝ๋‹ˆ๋‹ค.

๋‹ค์‹œ ์ปดํŒŒ์ผ ํ•ด๋ณผ๊นŒ์š”? ;-)

๋‹ค์Œ ๋‚ด์šฉ์œผ๋กœ .yarnclean ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

@types/react-native

๋ฌธ์ œ ํ•ด๊ฒฐ ๐ŸŽ‰

npm๊ณผ ๋™๋“ฑํ•œ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ๋ฌธ์ œ์— ์ง„์ „์ด ์žˆ์Šต๋‹ˆ๊นŒ?
styled-components๋ฅผ typescript์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์ด repo์˜ ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด @types/react-native ๊ฐ€ React Native ํ†ตํ•ฉ์„ ์œ„ํ•œ ์‹ค์ œ .d.ts ๋ฐ ํ…Œ์ŠคํŠธ ํŒŒ์ผ์—์„œ๋งŒ ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋ถ„๋ช…ํžˆ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. styled-components ์‹ค์ œ๋กœ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์ผ์น˜ํ•˜์—ฌ React Native์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ๊ฒƒ์„ ์ž์ฒด ํ•˜์œ„ ๋ชจ๋“ˆ/์„ ํƒ ์‚ฌํ•ญ/ํ”ผ์–ด ์ข…์†์„ฑ์œผ๋กœ ๋ถ„ํ• ํ•˜๋Š” ๊ฒƒ์ด ๋” ์ ์ ˆํ•œ ์†”๋ฃจ์…˜์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. import styled-components/native React Native ํ•ญ๋ชฉ์„ ์›ํ•˜๋Š” ๊ฒฝ์šฐ. styled-components ๊ฐ€์ ธ์˜ค์ง€ ์•Š๊ณ  ๋Ÿฐํƒ€์ž„์— React Native ํ•ญ๋ชฉ์˜ ์ „์ฒด ์ •๊ธ€๋„ ๊ฐ€์ ธ์˜ค๋ฏ€๋กœ styled-components ๋งŒ ๊ฐ€์ ธ์˜ด์œผ๋กœ์จ @types/react-native ์˜ ์ „์ฒด ์ •๊ธ€๋„ ์–ป์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค

๊ทธ๋™์•ˆ ๋ฐ˜์‘ ๋„ค์ดํ‹ฐ๋ธŒ ํ†ตํ•ฉ์€ ์ด ํŒจํ‚ค์ง€์˜ NPM ๊ฒŒ์‹œ ๋ฒ„์ „์—์„œ ์‚ญ์ œ๋˜๊ณ  ์ž์ฒด ํŒจํ‚ค์ง€๋กœ ๊ฒŒ์‹œ๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ๋กœ์„œ๋Š” ์ด๊ฒƒ์€ ์ฐฝํ”ผํ•˜๊ฒŒ ๊นจ์ ธ TypeScript๋ฅผ ์ „์ฒด์ ์œผ๋กœ ๋‚˜์˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์‹ญ์‹œ์˜ค. ์ตœ๋Œ€ํ•œ ๋นจ๋ฆฌ ๋„ค์ดํ‹ฐ๋ธŒ ์œ ํ˜•์„ ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค. ์ด๊ฒƒ์€ ๋‹ค๋ฅธ ํ›Œ๋ฅญํ•œ ํƒ€์ดํ•‘ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฑฐ์˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์ด repo์˜ ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด @types/react-native ๊ฐ€ React Native ํ†ตํ•ฉ์„ ์œ„ํ•œ ์‹ค์ œ .d.ts ๋ฐ ํ…Œ์ŠคํŠธ ํŒŒ์ผ์—์„œ๋งŒ ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋ถ„๋ช…ํžˆ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. styled-components ์‹ค์ œ๋กœ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์ผ์น˜ํ•˜์—ฌ React Native์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ๊ฒƒ์„ ์ž์ฒด ํ•˜์œ„ ๋ชจ๋“ˆ/์„ ํƒ ์‚ฌํ•ญ/ํ”ผ์–ด ์ข…์†์„ฑ์œผ๋กœ ๋ถ„ํ• ํ•˜๋Š” ๊ฒƒ์ด ๋” ์ ์ ˆํ•œ ์†”๋ฃจ์…˜์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. import styled-components/native React Native ํ•ญ๋ชฉ์„ ์›ํ•˜๋Š” ๊ฒฝ์šฐ. styled-components ๊ฐ€์ ธ์˜ค์ง€ ์•Š๊ณ  ๋Ÿฐํƒ€์ž„์— React Native ํ•ญ๋ชฉ์˜ ์ „์ฒด ์ •๊ธ€๋„ ๊ฐ€์ ธ์˜ค๋ฏ€๋กœ styled-components ๋งŒ ๊ฐ€์ ธ์˜ด์œผ๋กœ์จ @types/react-native ์˜ ์ „์ฒด ์ •๊ธ€๋„ ์–ป์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค

๐Ÿ‘

๊ทธ๋™์•ˆ ๋ฐ˜์‘ ๋„ค์ดํ‹ฐ๋ธŒ ํ†ตํ•ฉ์€ ์ด ํŒจํ‚ค์ง€์˜ NPM ๊ฒŒ์‹œ ๋ฒ„์ „์—์„œ ์‚ญ์ œ๋˜๊ณ  ์ž์ฒด ํŒจํ‚ค์ง€๋กœ ๊ฒŒ์‹œ๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ํ•ด๊ฒฐ์ฑ…์ด ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์ด ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค์ง€ ์•Š๊ณ  #32843์˜ ์ถ”์ง„๊ณผ ๊ฐ™์ด ๋™์ผํ•œ ํŒจํ‚ค์ง€๋กœ ๋‘˜ ๋‹ค ๋ฐฐ์†กํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์†”๋ฃจ์…˜์œผ๋กœ PR์„ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” Styled Components์— ํŠน๋ณ„ํžˆ ํˆฌ์žํ•œ ์‚ฌ๋žŒ์„ ์ฐพ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ™•์‹คํžˆTyped๋Š” ํŒจํ‚ค์ง€ ์ปค๋ฎค๋‹ˆํ‹ฐ์— ๋ฉ‹์ง„ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ ์—ฌ๊ธฐ์— ์œ ์ง€ ๊ด€๋ฆฌ์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋น„๋ก ๊ทธ๋“ค์˜ ์ž‘์—…์ด ๋ชจ๋“  ์œ ํ˜•์„ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ. ์ด ํ”„๋กœ์ ํŠธ(๋˜๋Š” TypeScript)์—์„œ ์ฃผ๋จน์„ ํœ˜๋‘๋ฅด๋Š” ๊ฒƒ์€ ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚œ ๊ฐ์ •์œผ๋กœ ์ „ํ™˜ํ•˜๊ณ  ์žˆ์–ด
์—ฌ๊ธฐ์—๋Š” ๊ณ ์œ ํ•œ ์œ ํ˜• ์Šคํฌ๋ฆฝํŠธ ์ •์˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ ์™„์ „ํžˆ ๋™์ผํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์€ ๋ชจ๋‘ ์‰ฝ๊ฒŒ ์ฐพ๊ณ  ๊ต์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ฒŒ๋‹ค๊ฐ€ ๋ฒˆ๋“ค ํฌ๊ธฐ๊ฐ€ ์กฐ๊ธˆ ๋” ์ž‘์Šต๋‹ˆ๋‹ค.

#32843์— ๋„์ž…๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋˜๋Œ๋ฆฌ๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ์‚ฌ์šฉ์ž์˜ 90% ์ด์ƒ์ด ํƒ€์ดํ•‘์„ ๊นจ๊ณ  ์ด ์Šค๋ ˆ๋“œ์—์„œ ์–ธ๊ธ‰๋œ ์˜ค๋ž˜๋œ ๋ฒ„์ „์ด๋‚˜ ์ผ๋ถ€ ํ•ดํ‚น์„ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ•์š”ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

#32843์— ๋„์ž…๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋˜๋Œ๋ฆฌ๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ์‚ฌ์šฉ์ž์˜ 90% ์ด์ƒ์ด ํƒ€์ดํ•‘์„ ๊นจ๊ณ  ์ด ์Šค๋ ˆ๋“œ์—์„œ ์–ธ๊ธ‰๋œ ์˜ค๋ž˜๋œ ๋ฒ„์ „์ด๋‚˜ ์ผ๋ถ€ ํ•ดํ‚น์„ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ•์š”ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋Œ€๋‹ค์ˆ˜์˜ ์‚ฌ์šฉ์ž๊ฐ€ ํƒ€์ดํ•‘์„ ๋” ์ž˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ธ ์†”๋ฃจ์…˜์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. PR์ด ์Šน์ธ๋ ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์ตœ์„ ์˜ ํ•ด๊ฒฐ์ฑ…์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋ถ€๋‹ด์—†์ด PR์„ ํ•ด์ฃผ์„ธ์š”.

์ด ๋˜๋Œ๋ฆฌ๊ธฐ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ๋‚˜์ค‘์— ๋ฐ˜์‘ ๋„ค์ดํ‹ฐ๋ธŒ์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ๋ฉ”๋ชจ๋ฅผ ํŒจํ‚ค์ง€์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์‹œ๋„ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ๋ฐ˜์‘ ๋„ค์ดํ‹ฐ๋ธŒ ์‚ฌ์šฉ์ž๊ฐ€ declare module ์„ ์–ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ œ๊ฑฐ๋œ ํƒ€์ดํ•‘์„ ๋ณต์‚ฌํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์— ๋ถ™์—ฌ๋„ฃ๊ณ  ์ž‘์—…์„ ๊ณ„์†ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋ฐ˜์‘ ๋„ค์ดํ‹ฐ๋ธŒ ์‚ฌ์šฉ์ž๊ฐ€ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์€ ๋ถ€๋„๋Ÿฌ์šด ์ผ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ TypeScript ํŒ€์—์„œ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ณต์‹์ ์ธ ์ง€์นจ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋ชจ๋“  ์†”๋ฃจ์…˜์—์„œ "์žƒ์–ด๋ฒ„๋ฆฐ" ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

IMO, ์ด๊ฒƒ์€ ๋˜๋Œ๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค - ์ฃผ๋กœ ์›น ์Šคํƒ€์ผ ๊ตฌ์„ฑ ์š”์†Œ ์ƒํƒœ๊ณ„๊ฐ€ ๋” ํฌ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋” ์ด์ƒ ์ž‘๋™ ๋ฐฉ์‹์— ๋Œ€ํ•œ ๋ชจ๋“  ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์•Œ์ง€ ๋ชปํ•˜์ง€๋งŒ React Native์˜ ๊ฒฝ์šฐ ๋‚˜์—๊ฒŒ ์ข‹์€ ์ ˆ์ถฉ์•ˆ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๋‹ค๋ฅธ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ์œ ํ˜• ์„ธํŠธ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ , ์ด๊ฒƒ์ด ๊ฐ€์ ธ์˜จ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์œผ๋กœ ๋‹ค์‹œ.

๋ฐ˜์‘ ๋„ค์ดํ‹ฐ๋ธŒ ํŠน์ • ์œ ํ˜•์„ ์ถ”๊ฐ€ํ•˜๋Š” ํŠธ๋ฆฌํ”Œ ์Šฌ๋ž˜์‹œ ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ํ†ตํ•ด ์‚ฌ๋žŒ๋“ค์ด ๊ฐ€์ ธ์˜ค๋Š” ์•ฐ๋น„์–ธํŠธ ๋ชจ๋“ˆ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— +1, ํ•˜์ง€๋งŒ ๋ถˆํ‰๋งŒ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํ–‰๋™ ๊ณ„ํš์ด ์žˆ๋‹ค๋ฉด ์ฐธ์—ฌํ•˜๊ณ  ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ฃผ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์—ฌ๊ธฐ์— ์™€์„œ ์ผ๋ถ€ ์˜๊ฒฌ์— ๋‚ด ํ”Œ๋Ÿฌ์Šค๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ด๋ฏธ ๊ทธ๋ ‡๊ฒŒ ํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค... ์ด ๋ฌธ์ œ๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ.

๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์ด ๋‚ด๊ฐ€ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ด€๋ฆฌ์ž์—๊ฒŒ ๊ทธ๋“ค์˜ ์œ ํ˜•์„ ์œ ์ง€ํ•˜๋„๋ก ๊ฐ„์ฒญํ•œ ์ด์œ ์ž…๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•ด๋‹น ์œ ํ˜•๊ณผ ํ•จ๊ป˜ ์ธ๋ผ์ธ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. def typed๊ฐ€ ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์—ฌ๋Ÿฌ ๋ฉด์—์„œ ๋„์›€์ด ๋˜์—ˆ๋‹ค๋Š” ์ ์ด ๋งˆ์Œ์— ๋“ค์ง€๋งŒ lib ์œ ์ง€ ๊ด€๋ฆฌ์ž๊ฐ€ ์ง์ ‘ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ ts๋กœ ๋‹ค์‹œ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์ด ์žˆ์œผ๋ฉด ๋” ์•ˆ์ „ํ•œ ์„ธ์ƒ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๋กœ์ปฌ ํด๋ก ์„ ํ†ตํ•ด ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋ƒ‰์ •ํ•˜๊ณ  ์นจ์ฐฉํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ „ ์„ธ๊ณ„ ์‚ฌ๋žŒ๋“ค์ด ์ด ๋ฌธ์ œ(6๊ฐœ์›” ์ด์ƒ)๋กœ ์ถฉ๋ถ„ํžˆ ๊ณ ํ†ต์„ ๊ฒช์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ์ค‘์š”ํ•˜๊ณ  ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ๊ธฐ์ˆ ์— ์ •ํ†ตํ•˜์ง€ ์•Š์€ ํƒ€์ดํ”„์Šคํฌ๋ฆฝํŠธ ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค์‹œ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์Šน์ธ์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” PR์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์œ ํšจํ•˜์ง€ ์•Š์€ react-native ์ „์—ญ ์ข…์†์„ฑ์„ ์ œ๊ฑฐํ•˜๋Š” ํ•œ ์ค„์˜ ์ฝ”๋“œ ๋ณ€๊ฒฝ์„ ๋„ฃ์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ(๋‚ด ๊ฐœ์ธ npm ์ €์žฅ์†Œ ๋‚ด์—์„œ ํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ)?

๋˜ํ•œ react-native ๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•˜๊ณ  ๊ธ€๋กœ๋ฒŒ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์™€ ์ถฉ๋Œํ•˜๋Š” ์ด์œ ๊ฐ€ ์žˆ๋‚˜์š”? ์ฐจ์ž„ํ•˜๊ณ  ์ƒ๊ฐ์„ ๊ณต์œ ํ•˜์‹ญ์‹œ์˜ค. (ํ•˜์ง€๋งŒ ๋ณธ์˜ ์•„๋‹ˆ๊ฒŒ ์šฐ๋ฆฌ ์ž‘์—…์„ ๋ฐฉํ•ดํ•œ ์‚ฌ๋žŒ๋“ค์ด ์ด ํ˜ธ๋ฅผ ์ฝ์—ˆ์„์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ํ”ผํ•ด์— ๋Œ€ํ•ด ์ „ํ˜€ ๋ชจ๋ฅด๊ณ  ์žˆ์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๊ธฐ๋ปํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๊ทธ๋Ÿฐ ๊ฒฝ์šฐ์˜ ๋ฐ˜๋Œ€ํŽธ์— ์žˆ์—ˆ๋‹ค๊ณ  ๋งํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์ „์—.)

๋˜ํ•œ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๋Š” ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๊นŒ? ๋‚˜๋Š” ์ด ๋ฌธ์ œ๋ฅผ ๋˜๋Œ๋ฆฌ๋Š” _"๋‹จ์ˆœํ•œ"_ PR์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ์ฃผ์ €ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๋‹จ์„œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋˜๋Œ๋ ค์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด skipLibCheck ๋ฅผ ํ™œ์„ฑํ™”ํ•  ํ•„์š”๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. https://github.com/DefinitelyTyped/DefinitelyTyped/issues/33311#issuecomment -466731156 . ํ•˜์ง€ ๋งˆ์„ธ์š”.

์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋˜๋Œ๋ฆฌ๋Š” ๊ฒƒ์€ ์ข‹์€ ์„ ํƒ์ด ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด react-native์— ๋Œ€ํ•œ ํƒ€์ดํ•‘์ด ํ•„์š”ํ•˜๊ณ  ์˜ค๋ฅ˜๋ฅผ ์ผ์œผํ‚ค๋Š” ๊ฒƒ์„ ์ˆ˜์ •ํ•˜๊ณ  ๋ชจ๋“  react-native ํƒ€์ดํ•‘์„ ์ œ๊ฑฐํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํ˜„์žฌ ํ•ด๊ฒฐ์ฑ…์ด ์—†๋‹ค๋ฉด? ์šฐ๋ฆฌ๋Š” ์ ์–ด๋„ ํ•˜๋‚˜์˜ ๋ฆด๋ฆฌ์Šค๋ฅผ ๋น„๋„ค์ดํ‹ฐ๋ธŒ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ํ˜„์žฌ ์™„์ „ํžˆ ๋ง๊ฐ€์กŒ๊ณ  ํ•œ๋™์•ˆ ๊ทธ๋ž˜์™”๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” ๋น„๋„ค์ดํ‹ฐ๋ธŒ ์‚ฌ์šฉ์ž๋„ ๋Œ€๋‹ค์ˆ˜์ผ ๊ฒƒ์ด๋ผ๊ณ  ๊ฐํžˆ ์ถ”์ธกํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

react-native ์ž…๋ ฅํ•ด์•ผ ํ•˜๋Š” @dawick ์‚ฌ๋žŒ๋“ค์€ ์ˆ˜๋™์œผ๋กœ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์™œ ๊ทธ๋“ค์ด ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?

์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋˜๋Œ๋ฆฌ๋Š” ๊ฒƒ์€ ์ข‹์€ ์„ ํƒ์ด ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด react-native์— ๋Œ€ํ•œ ํƒ€์ดํ•‘์ด ํ•„์š”ํ•˜๊ณ  ์˜ค๋ฅ˜๋ฅผ ์ผ์œผํ‚ค๋Š” ๊ฒƒ์„ ์ˆ˜์ •ํ•˜๊ณ  ๋ชจ๋“  react-native ํƒ€์ดํ•‘์„ ์ œ๊ฑฐํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

react-native ๋Œ€ํ•œ ํƒ€์ดํ•‘์ด ํ•„์š”ํ•œ ์‚ฌ๋žŒ๋“ค์€ @types/react-native ๋ฅผ ์„ค์น˜ํ•˜์—ฌ ์–ป์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์—ฌ์ „ํžˆ react-native ์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ๊ฒƒ์„ @types/styled-components ์—์„œ ์‚ญ์ œํ•˜๊ณ  ์‚ฌ๋žŒ๋“ค์ด ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์ผ์น˜ํ•˜๋„๋ก @types/styled-components/native ์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€/๊ฒฝ๋กœ๋กœ ์˜ฎ๊ฒจ์•ผ ํ•œ๋‹ค๋Š” ์ž…์žฅ์„ ๊ฐ•ํ•˜๊ฒŒ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. styled-components ; ์›ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ react-native ์ง€์›์ด ๋ช…์‹œ ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์–ป์„ import styled from 'styled-components/native' , ๋‹น์‹ ์€ ๋ชจ๋‘์˜ ์ „์ฒด ์–ป์ง€ ์•Š๋Š”๋‹ค react-native ์ˆ˜ํ–‰ํ•˜์—ฌ ์ •๊ธ€์„ import styled from 'styled-components' ์›น์—์„œ ํ”„๋กœ์ ํŠธ์ด๋ฏ€๋กœ ์—ฐ๊ฒฐ๋œ @types/ ํŒจํ‚ค์ง€๋Š” ๋‹ค๋ฅด๊ฒŒ ์ž‘๋™ํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ฃผ๋ง์— ๋” ์ฒด๊ณ„์ ์ธ ๋ฐฉ์‹์œผ๋กœ ์ด๊ฒƒ์„ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด ์ฐ”๋ €์Šต๋‹ˆ๋‹ค. ์›น + ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ˜์‘ ๋ชจ๋‘์— ๋Œ€ํ•œ ์œ ํ˜•์„ ๋ž˜ํ•‘ํ•˜๋Š” ๋ชจ๋“  ์ €์žฅ์†Œ์—์„œ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/microsoft/types-publisher/pull/655

์ด๊ฒŒ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜๋Š”์ง€...

์ง„์ง€ํ•˜๊ฒŒ? ์•„์ง๋„ ์ˆ˜์ •์ด ์•ˆ๋˜๋‚˜์š”?

@givethemheller @sanex3339 https://github.com/microsoft/types-publisher/pull/655 ์—์„œ ์ž‘์—… ๋ฐ ํ† ๋ก ์— ์ˆ˜์ • ์‚ฌํ•ญ์ด

์ž„์‹œ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ node_modules์—์„œ @types/react-native ๋ฅผ ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค.
rm -rf node_modules/@types/react-native
.yarnclean
@types/react-native

TypeScript 3.7์ด ์ถœ์‹œ๋˜๋ฉด์„œ ์ด์ „์— ์ž‘๋™ํ•˜๋˜ v4.1.8์ด ์ด์ œ TS 3.7๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š์ง€๋งŒ TS 3.7๊ณผ ํ˜ธํ™˜๋˜๋Š” ์œ ์ผํ•œ ๋ฒ„์ „์ด ์™„์ „ํžˆ ์†์ƒ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— 3.7 ์‚ฌ์šฉ์ž๊ฐ€ ์œ ํ˜• ์ •์˜๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์— ์ฒ˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  React-web ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค(ํ™•์‹คํžˆ ๋Œ€๋‹ค์ˆ˜๊ฐ€ ์••๋„์ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค). ๐Ÿ˜•

.yarnclean ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ Yarn์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ถฉ๋ถ„ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  compilerOptions ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์€ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์žฅ๊ธฐ์ ์ธ ์†”๋ฃจ์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๊ฐ€์žฅ ์ข‹์€ ํ•ด๊ฒฐ์ฑ…์ด ๋ฌด์—‡์ธ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ž„์‹œ๋ฐฉํŽธ์œผ๋กœ ์ €๋Š” react-native ํ•ญ๋ชฉ์„ ๊ตฌ์ฒด์ ์œผ๋กœ ์ œ์™ธํ•˜๋Š” ๋ณ„๋„์˜ ๋ฒ„์ „์„ ๊ฒŒ์‹œํ•˜๋Š” ๊ฒƒ์„ ์ฐฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์›์‚ฌ๊ฐ€ ์•„๋‹Œ ์‚ฌ์šฉ์ž๋Š” npm ์Šคํฌ๋ฆฝํŠธ์— ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    "postinstall": "rm -rf node_modules/@types/react-native"

NPM์ด ๋„ค์ดํ‹ฐ๋ธŒ ์œ ํ˜•์„ ์„ค์น˜ํ•œ ํ›„ ์ฆ‰์‹œ ์‚ญ์ œํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์•„์•ผ ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ํ•ดํ‚ค ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด์ง€๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—๋„ ๋‚˜๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ์„ค์น˜ ํ›„ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํŽธ์ง‘ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋‚˜์€ ์†”๋ฃจ์…˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค...

์ด ๋ฌธ์ œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ 1๋…„ ์ด์ƒ(!!!) ๋™์•ˆ styled-components์˜ ๋ชจ๋“  typescript ์‚ฌ์šฉ์ž์—๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.
์ด์— ๋Œ€ํ•œ ๊ณต์‹ ์†”๋ฃจ์…˜์ด ์žˆ์Šต๋‹ˆ๊นŒ(.yarnclean์„ ์‚ฌ์šฉํ•œ ํ•ดํ‚น์€ ์ œ์™ธ)? ์ฐจ๋‹จ๊ธฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ์ด๊ฒƒ์„ ๋‘ ๊ฐœ์˜ ํŒจํ‚ค์ง€(๋˜๋Š” ์ž ์žฌ์ ์œผ๋กœ ์„ธ ๊ฐœ์˜ ๊ธฐ๋ณธ ํŒจํ‚ค์ง€, react-native์™€ react ๋ชจ๋‘์— ๋Œ€ํ•œ ๊ณตํ†ต ํ•ญ๋ชฉ, ํ•˜๋‚˜๋Š” react, ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” RN์šฉ, ๊ทธ๋ฆฌ๊ณ  ๋‘ ํŒจํ‚ค์ง€๋Š” ๊ณตํ†ต ํ•ญ๋ชฉ๊ณผ ํ•จ๊ป˜ ์ฒซ ๋ฒˆ์งธ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•จ)๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ๋Œ€์ฒ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ธฐ๊บผ์ด ๋„์™€์ฃผ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์šฐ๋ฆฌ์—๊ฒŒ ๊ธฐ์—ฌ์ž๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค๋ฉด, ํ•ดํ‚นํ•  ํ•„์š” ์—†์ด styled-component์™€ typescript๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฌ์› ์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ˜„

๋‚œ ๊ทธ๋ƒฅ ์ฃผ์œ„์— ๋ฌผ๊ฑด์„ ํ•ดํ‚นํ•  ํ•„์š” ์—†์ด ์Šคํƒ€์ผ์ด ์ง€์ •๋œ ๊ตฌ์„ฑ ์š”์†Œ์™€ ํƒ€์ดํ”„์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฌ์› ์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ˜„

์ถฉ๋Œ! ๋” ๋‚˜์€ ์œ ํ˜• ์ •์˜ ๊ตฌํ˜„์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค...

๋‚ด node_modules์—์„œ @types/react-native ์„ ์ œ๊ฑฐํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์™œ ํ•ดํ‚น์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ ?

@ArnaudJeannin ์ˆ˜๋™์œผ๋กœ ์‚ญ์ œํ–ˆ๋‹ค๋ฉด npm i / yarn ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๋‹ค์‹œ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

์„ค์น˜๋ฅผ ํ†ตํ•ด ์‚ญ์ œ๋ฅผ ์ง€์†ํ•˜๋ ค๋ฉด ์ด์ „ ์˜๊ฒฌ์— ๋”ฐ๋ผ NPM postinstall ์„ ํ†ตํ•ด ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ Yarn์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ .yarnclean ํ•˜๋ฉด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ํ•œ ์ผ์€ ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ์ ํ•ฉํ•˜์ง€๋Š” ์•Š์ง€๋งŒ styled-components์—์„œ Emotion ์œผ๋กœ ์ „ํ™˜ํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ "ํ•ด๊ฒฐ"ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ชจ๋‘ CSS๋กœ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ž˜ํ•‘ํ•˜๊ณ  ์Šคํƒ€์ผ์„ ์ƒ์†ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ์•„์ฃผ ๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ๋ฒ•์ด์ง€๋งŒ, ๋‚ด๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์Šคํƒ€์ผ ๊ตฌ์„ฑ ์š”์†Œ์™€ ์œ ์‚ฌํ•œ API๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” Emotion์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ์‰ฌ์šด ์ „ํ™˜์ด์—ˆ์Šต๋‹ˆ๋‹ค. 6๊ฐœ์›”์ด ์ง€๋‚œ ์ง€๊ธˆ๊นŒ์ง€ ํฐ ๋ฌธ์ œ๋Š” ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์ •์—๋Š” ๊ธฐ๋ณธ ์ œ๊ณต TS ์ž…๋ ฅ์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ @types ๋™๊ธฐํ™”๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด CSS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ๋งŽ์€ ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉํ•˜์ง€ ์•Š์ง€๋งŒ ์ €์—๊ฒŒ๋Š” ์ „ํ™˜์ด ์Šคํƒ€์ผ ๊ตฌ์„ฑ ์š”์†Œ TS ๋ฌธ์ œ์™€ ์”จ๋ฆ„ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์‰ฌ์› ์Šต๋‹ˆ๋‹ค. YMMV.

yarn ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ๋” ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ํ˜„์žฌ ๋ฒ„์ „์˜ ์Šคํƒ€์ผ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. package.json์—์„œ:

  "resolutions": {
    "@types/react-native": "link:./empty-package"
  },

์œ„์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์˜ ๋Œ€์ƒ์ธ ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š๋Š” ํŒจํ‚ค์ง€๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

mkdir empty-package
cd empty-pacakge
yarn init -y
touch index.d.ts

๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

@arimah @GabrielDuarteM , ๋‹น์‹ ์˜ downvote๋ฅผ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด๊ฒƒ์„ ์‹œ๋„ํ–ˆ๋Š”๋ฐ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๊นŒ? ๋‚ด๊ฐ€ ๋„์šธ ์ˆ˜ ์žˆ๋„๋ก ๋Œ“๊ธ€์„ ๋‹ฌ์•„์ฃผ์„ธ์š”. ๊ทธ๋Ÿฌ๋ฉด ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ด ์‹œ์ ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๋‹ค๋ฅธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•(์œ ํ˜• ๋ชจ๋“ˆ์„ ์‚ญ์ œํ•˜๋Š” ์„ค์น˜ ํ›„ ์Šคํฌ๋ฆฝํŠธ)๋ณด๋‹ค ํ›จ์”ฌ ๋œ ์นจ์ž…์ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ์ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋‚ด๊ฐ€ ๊นจ๋‹ซ์ง€ ๋ชปํ•œ ๊ฐ•๋ ฅํ•œ ๋ถ€์ •์ ์ธ ์ ์ด ์žˆ๋‹ค๋ฉด ์ฃผ์„์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

@jamietre ๋‚˜๋Š” downvotes๊ฐ€ ์ด๊ฒƒ์ด ์ž‘๋™ ํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ์ด๊ฒƒ์ด ์˜ฌ๋ฐ”๋ฅธ ์†”๋ฃจ์…˜์ด ์•„๋‹ˆ๋ฉฐ ๋ฐ˜์‘ ๋„ค์ดํ‹ฐ๋ธŒ๋ฅผ ์œ„ํ•ด ์œ ํ˜•์„ ๋ถ„ํ• ํ•ด์•ผํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (๋˜๋Š” ์•„๋งˆ๋„ ํ”ผ์–ด ์ข…์†์„ฑ)

@jamietre ๋‚˜๋Š” downvotes๊ฐ€ ์ด๊ฒƒ์ด ์ž‘๋™ ํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ์ด๊ฒƒ์ด ์˜ฌ๋ฐ”๋ฅธ ์†”๋ฃจ์…˜์ด ์•„๋‹ˆ๋ฉฐ ๋ฐ˜์‘ ๋„ค์ดํ‹ฐ๋ธŒ๋ฅผ ์œ„ํ•ด ์œ ํ˜•์„ ๋ถ„ํ• ํ•ด์•ผํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (๋˜๋Š” ์•„๋งˆ๋„ ํ”ผ์–ด ์ข…์†์„ฑ)

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ๋ˆˆ์‚ด์„ ์ฐŒํ‘ธ๋ฆฌ๋Š” ๊ฒƒ์„ ๊นจ๋‹ซ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ ์ˆ˜์ •์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ ํ•ญ์ƒ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ 1๋…„ ๋„˜๊ฒŒ ๋ฌธ์ œ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์•„์ง ์ž‘์—…์„ ์™„๋ฃŒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿคทโ€โ™‚

@jamietre ์ œ ์ƒ๊ฐ์—๋Š” ๋‹น์‹ ์ด ๊ทธ๊ฒƒ์„ "ํ•ด๊ฒฐ์ฑ…"์œผ๋กœ ํ”„๋ ˆ์ž„ํ™”ํ•œ ๊ฒƒ๋ฟ์ธ๋ฐ, ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ, ์œ ์ง€๋ณด์ˆ˜

@jamietre ์ œ ์ƒ๊ฐ์—๋Š” ๋‹น์‹ ์ด ๊ทธ๊ฒƒ์„ "ํ•ด๊ฒฐ์ฑ…"์œผ๋กœ ํ”„๋ ˆ์ž„ํ™”ํ•œ ๊ฒƒ๋ฟ์ธ๋ฐ, ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ, ์œ ์ง€๋ณด์ˆ˜

"ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•"์„ "ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•"์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค... ์‹ค์ œ๋กœ ์ €๋Š” ์‚ฌ๋žŒ๋“ค์ด typescript์™€ ํ•จ๊ป˜ styledcomponents๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. downvotes๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์˜๋ฏธ๋ก ์— ๋Œ€ํ•ด ๋…ผ์Ÿํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ ํ™•์‹คํ•ฉ๋‹ˆ๋‹ค.

Appsome Solutions ์—์„œ๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ณ  tsconfig.json ํŒŒ์ผ์˜ "skipLibCheck": true, ๊ทœ์น™์œผ๋กœ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

@pumanitro ์ œ์•ˆ๋œ ๋‹ค๋ฅธ ๋งŽ์€ ๊ฒƒ๋“ค๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ถˆํ–‰ํžˆ๋„ ์ด๊ฒƒ์€ ํ•ด๊ฒฐ์ฑ…์ด ์•„๋‹ˆ๋ผ ๋‹จ์ˆœํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

@SamHH ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐ๋œ ๋‹จ์–ด๋ฅผ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์ด typescript๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ CRA์—์„œ ์ˆ˜ํ–‰๋˜๋Š” ๋ฐฉ๋ฒ•์ด์ง€๋งŒ ์†”๋ฃจ์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

https://github.com/DefinitelyTyped/DefinitelyTyped/pull/32843#issuecomment -605921101์—์„œ ๋‚ด ์˜๊ฒฌ ๋‹ค์‹œ ๊ฒŒ์‹œ

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค compilerOptions.types ์—์„œ ๋ฐฐ์—ด์„ํ•˜์—ฌ tsconfig.json ์ž๋™์œผ๋กœ ๋งค์ผ ์ฝ๋Š” ํƒ€์ดํ”„ ๋ผ์ดํ„ฐ๋ฅผ ์ค‘์ง€ํ•˜๋Š” @types/* ๊ฒฝ์šฐ ์œ ํ˜• ๊ฒ€์‚ฌ ํŒจํ‚ค์ง€๋ฅผ. Typescript๋Š” types ๋ฐฐ์—ด์— ์ด๋ฆ„์ด ์ง€์ •๋œ ํŒจํ‚ค์ง€ ์œ ํ˜•๋งŒ ์ž๋™์œผ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "types": ["node"] ( buffer ๋˜๋Š” path ์™€ ๊ฐ™์€ ๋‚ด์žฅ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ @types/node ๋ฅผ ๋กœ๋“œํ•˜๋Š” ๊ฒฝ์šฐ), "types": ["node", "jest"] ( ๋˜ํ•œ ๋†๋‹ด ํ…Œ์ŠคํŠธ๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค); ๋˜๋Š” "types": [] ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง์ ‘ ๊ฐ€์ ธ์˜ค์ง€ ์•Š์€ ํŒจํ‚ค์ง€๋‚˜ ์ฝ”๋“œ์—์„œ /// <reference types="..." /> ๋ฅผ ์ž๋™ ๋กœ๋“œํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

@types/styled-components-native ๊ฐ€ ๋” ๋‚˜์€์ง€ ์—ฌ๋ถ€๋Š” ๋งํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์ตœ์†Œํ•œ ์ด๋ก€์ ์ธ ์ผ์ด๋ฉฐ compilerOptions.types "ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•"์˜ ํ•„์š”์„ฑ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ IMO๋Š” compilerOptions.types ๋ฅผ ์ž๋™ ๋กœ๋“œํ•ด์•ผ ํ•˜๋Š” ํŒจํ‚ค์ง€ ์œ ํ˜•์œผ๋กœ๋งŒ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค( import ์—†์ด


์š”์•ฝํ•˜์ž๋ฉด, ๋ฌธ์ œ๋Š” ๊ธฐ๋ณธ ๋™์ž‘์ด ๋ชจ๋“  @types/* ํŒจํ‚ค์ง€๋ฅผ ๋กœ๋“œ ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ง์ ‘ ๋˜๋Š” ๊ฐ„์ ‘์ ์œผ๋กœ ์ฐธ์กฐํ•˜์ง€ ์•Š์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  TypeScript๊ฐ€ ์ž๋™์œผ๋กœ @types/react-native ์œ ํ˜•์„ ๋กœ๋“œํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. compilerOptions.types ๋ฅผ ์„ค์ •ํ•˜๋ฉด ํ•ด๋‹น ๊ธฐ๋ณธ๊ฐ’์ด ๋ฐฉ์ง€๋˜๊ณ  ๋‚˜์—ดํ•œ ํŒจํ‚ค์ง€ + import ํŒจํ‚ค์ง€๋งŒ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์—ฌ์ „ํžˆ ๋ฌธ์ œ๋ผ๋Š” ๊ฒƒ์ด ๋ฏฟ๊ธฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค! ์ง€๋‚œ ์—ฌ๋ฆ„์— ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”๋ฐ, ๊ทธ ์ดํ›„๋กœ ์ˆ˜์ •๋˜์—ˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฉ๊ธˆ ํŒจํ‚ค์ง€๋ฅผ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜ 

@types/styled-components์˜ ๊ด€๋ฆฌ์ž๋Š” ๋ˆ„๊ตฌ์ž…๋‹ˆ๊นŒ? ์šฐ๋ฆฌ๋Š” ์ƒˆ๋กœ์šด ์‚ฌ๋žŒ์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—

compilerOptions.types ์˜ @Jessidhia ์ œ์•ˆ์ด ํšจ๊ณผ์  ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋งค์šฐ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๋‚˜๋Š” ์ด๊ฒƒ์„ ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค๋กœ๋„ ๋ณธ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€๋Š” ์•„๋ฌด๋Ÿฐ ๋ถˆ์ด์ต๋„ ๊ฒฝํ—˜ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋” ๋น ๋ฅด๋‹ค๋Š” ๊ฒƒ๋„ ์ƒ์ƒํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

@sbusch ๋‹จ์ ์€ compilerOptions.types ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ด ๋ชฉ๋ก์— ํฌํ•จ๋˜์ง€ ์•Š์€ ๋ชจ๋“  ํ•ญ๋ชฉ์ด ์ œ์™ธ๋˜๋ฏ€๋กœ ๋ชจ๋“  ์ž…๋ ฅ์ด ์—ฌ๊ธฐ์— ๋‚˜์—ด๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ž…๋ ฅ์„ ์ œ๊ณตํ•˜๋Š” ์„ค์น˜๋œ ํŒจํ‚ค์ง€์˜ ๊ฒฝ์šฐ ์ด ๊ตฌ์„ฑ์„ ์ˆ˜๋™์œผ๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ๋ชจ๋“  ์œ ํ˜•์„ ์œ ํ˜•์œผ๋กœ ๋‚˜์—ดํ•˜๋Š” ๊ฒƒ์€ ์˜ต์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋ชจ๋“ˆ์—์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ ๊ฐ€์ ธ์˜ค๋ฉด ์—ฌ์ „ํžˆ TypeScript ์ž…๋ ฅ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. types ์˜ต์…˜์€ ์ „์—ญ ์„ ์–ธ์˜ ์œ ํ˜•์„ ์ž๋™์œผ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ž์ฃผ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํ•ด๋‹น ๋ชจ๋“ˆ์„ types ์— ์ˆ˜๋™์œผ๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋„ ๋‚˜์˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. types ๋ฐฐ์—ด์„ [] ์„ค์ •ํ•œ ํ›„์—๋„ ๋งค์šฐ ์—„๊ฒฉํ•œ TS ์„ค์ •์„ ๊ฐ€์ง„ ์ƒ๋‹นํžˆ ํฐ TS ์ฝ”๋“œ๋ฒ ์ด์Šค๋Š” ์—ฌ์ „ํžˆ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด https://stackoverflow.com/a/59030291์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๋‹จ์ ์€ compilerOptions.types ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ด ๋ชฉ๋ก์— ํฌํ•จ๋˜์ง€ ์•Š์€ ๋ชจ๋“  ํ•ญ๋ชฉ์ด ์ œ์™ธ๋˜๋ฏ€๋กœ ๋ชจ๋“  ์ž…๋ ฅ์ด ์—ฌ๊ธฐ์— ๋‚˜์—ด๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ž…๋ ฅ์„ ์ œ๊ณตํ•˜๋Š” ์„ค์น˜๋œ ํŒจํ‚ค์ง€์˜ ๊ฒฝ์šฐ ์ด ๊ตฌ์„ฑ์„ ์ˆ˜๋™์œผ๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@sbush๊ฐ€ ๋งํ–ˆ๋“ฏ์ด ์ด๊ฒƒ์€ ์‚ฌ์‹ค์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์€ ์ „์—ญ ์œ ํ˜•์—๋งŒ ํ•ด๋‹น๋˜๋ฉฐ import ed libs์˜ ์ž…๋ ฅ์€ ๋ฌธ์ œ ์—†์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. @Jessidhia ์˜ ์ œ์•ˆ์€ ๋ฌดํ•ดํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹จ์ผ ํŒจํ‚ค์ง€๊ฐ€ ์†Œ๋น„์ž๋“ค๋กœ ํ•˜์—ฌ๊ธˆ ๊ทธ ๋ถ„์•ผ๋ฅผ ๊ทธ๋Œ€๋กœ ๋‘๋Š” ๊ด€์Šต์„ ๊นจ๋„๋ก ๊ฐ•์š”ํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ด๊ฒƒ์€ ํ•ด๊ฒฐ์ฑ…์ด ์•„๋‹ˆ๋ผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๋ชจ๋…ธ ๋ ˆํฌ Lerna + yarn workspaces (๋‹ต๋ณ€์ด ๋„ˆ๋ฌด ๋งŽ์Œ)๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋ˆ„๊ตฐ๊ฐ€ ์ด๋ฏธ ์ผ€์ด์Šค์— ๋‹ต๋ณ€ํ–ˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ํ„ธ์‹ค ์›น์‚ฌ์ดํŠธ์—์„œ no-hoist ์†์„ฑ์„ ๋” ๋งŽ์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

package.json ํŒŒ์ผ์˜ ์‚ฌ๋ก€:

"workspaces": {
  "packages": ["packages/*"],
  "nohoist": ["**/react-native", "**/react-native/**"]
}

๐Ÿ™๐Ÿป @types/styled-components": "4.1.8" ๐Ÿ™๐Ÿป

์›์‚ฌ monorepos๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์†”๋ฃจ์…˜ @nahumzs๊ฐ€ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ react-native๊ฐ€ ์ „์—ญ node_packages ํด๋”๋ฅผ ์˜ค์—ผ์‹œํ‚ค์ง€ ์•Š๋„๋ก ํ•˜์—ฌ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ค‘๋ณต์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์–ด๋–ค ์‹œ์ ์—์„œ React Native ์‚ฌ์šฉ์ž๋ณด๋‹ค React Web ์‚ฌ์šฉ์ž๊ฐ€ ๋” ๋งŽ๋‹ค๊ณ  ๋งํ•˜๊ณ  React Native ์ง€์›์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๊นŒ?

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ง„์ „์ด ์žˆ์—ˆ์Šต๋‹ˆ๊นŒ? npm ์„ค์น˜ ํ›„ ๋ช…๋ น์—์„œ node_modules/@types/react-native ์‚ญ์ œ์™€ ๊ฐ™์€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด๋‚˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ์—†์ด ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ @types/styled-components ๋ฒ„์ „ 4.1.8์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ค ์”จ๋ฐœ, ์ด ๋ฌธ์ œ๋Š” ๋‚˜์—๊ฒŒ ์ •๋ง ๋งŽ์€ ๊ณ ํ†ต์„ ์ค€๋‹ค.

์ด์ œ ์—ฌ๊ธฐ์— ์„ค๋ช…๋œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ตœ์‹  Typescript๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋ฉด @types/[email protected] ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๐Ÿ˜ก๐Ÿ˜ก๐Ÿ˜ก WTH.

์–ด์จŒ๋“  ์ด๊ฒƒ์€ https://github.com/DefinitelyTyped/DefinitelyTyped/issues/33015 ์˜ ๋ณต์ œ๋ณธ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค

Appsome Solutions ์—์„œ๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ณ  tsconfig.json ํŒŒ์ผ์˜ "skipLibCheck": true, ๊ทœ์น™์œผ๋กœ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ฐ™์€ ์ƒ๊ฐ์„ ํ•˜๋Š” ๊ฒฝ์šฐ: ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด skipLibCheck ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ตœ๊ทผ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ์ƒˆ๋กœ์šด TypeScript ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด skipLibCheck ํ™œ์„ฑํ™”๋˜์–ด ๋งˆ์Œ์ด ๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ถ„๋ช…ํžˆ ์„ฑ๋Šฅ์ƒ์˜ ์ด์œ ์ง€๋งŒ ์—ฌ๊ธฐ์—์„œ ๋ณด๊ณ  ์žˆ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ ๋•Œ๋ฌธ์— ์ƒ์ƒํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„์ฃผ ๋”๋Ÿฌ์šด ํ•ดํ‚น์œผ๋กœ ๊ดœ์ฐฎ์€ ์‚ฌ๋žŒ์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. package.json ์Šคํฌ๋ฆฝํŠธ ์„น์…˜์— ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

"postinstall": "rm -rf node_modules/@types/react-native"

ํ›Œ๋ฅญํ•œ ์†”๋ฃจ์…˜์€ ์•„๋‹ˆ์ง€๋งŒ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์„ธ์ƒ์—, ์ด ๋ฌธ์ œ๋Š” 5.1.1์—์„œ๋„ ์—ฌ์ „ํžˆ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค.

1- ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— .yarnclean ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
2- @types/react-native ๋‚ด์šฉ์„ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ ์–ด๋„ ๊ณต์‹ ์†”๋ฃจ์…˜์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ ์—ฌ๊ธฐ์—์„œ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด 1.5๋…„ ๋„˜๊ฒŒ ๊ณ„์†๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ๋‚ด ๋ฌธ์ œ๊ฐ€ ๊ด€๋ จ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ๋” ๋งŽ์€ "์ค‘๋ณต ์‹๋ณ„์ž" ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด 36๊ฐœ.

tsconfig.json

{
  "compilerOptions": {
    "allowJs": true,
    "baseUrl": ".",
    "esModuleInterop": true,
    "isolatedModules": true,
    "jsx": "react",
    "module": "CommonJS",
    "moduleResolution": "Node",
    "noEmit": true,
    "sourceMap": true,
    "target": "ES6"
  },
  "include": [
    "src/**/*"
  ],
}

tsc ๋กœ ์ปดํŒŒ์ผํ•œ ๊ฒฐ๊ณผ:

์ด: 38๊ฐœ์˜ ์˜ค๋ฅ˜. ๊ทธ ์ค‘ 2๊ฐœ๋งŒ ์‹ค์ œ ํ”„๋กœ์ ํŠธ ์†Œ์Šค src/**.* ํŒŒ์ผ์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ 36๊ฐœ์˜ ์˜ค๋ฅ˜๋Š” @types/styled-components ์ธํ•œ .d.ts ์ถฉ๋Œ์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ : "skipLibCheck": true ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ๋˜ํ•œ @types/styled-components ์ œ๊ฑฐํ•˜๋ฉด ์˜ค๋ฅ˜๋„ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ์ „์ฒด ๋กœ๊ทธ๋ฅผ ๊ฒŒ์‹œํ•˜์ง€ ์•Š๊ฒ ์ง€๋งŒ ์—ฌ๊ธฐ์— ๋ช‡ ๊ฐ€์ง€ ์˜ˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

error TS2300: Duplicate identifier 'AbortController'.
../../../AppData/Roaming/npm/node_modules/typescript/lib/lib.dom.d.ts:1939:11
../../../AppData/Roaming/npm/node_modules/typescript/lib/lib.dom.d.ts:1950:13 
node_modules/@types/react-native/globals.d.ts:363:15

error TS2300: Duplicate identifier 'AbortSignal'. 
../../../AppData/Roaming/npm/node_modules/typescript/lib/lib.dom.d.ts:1960:11 
node_modules/@types/react-native/globals.d.ts:350:15
../../../AppData/Roaming/npm/node_modules/typescript/lib/lib.dom.d.ts:1972:13

error TS2300: Duplicate identifier 'FormData'. 
../../../AppData/Roaming/npm/node_modules/typescript/lib/lib.dom.d.ts:5548:11
node_modules/@types/react-native/globals.d.ts:40:15
../../../AppData/Roaming/npm/node_modules/typescript/lib/lib.dom.d.ts:5558:13

error TS2300: Duplicate identifier 'URL'.
error TS2300: Duplicate identifier 'URLSearchParams'.
error TS2300: Duplicate identifier 'RequestInfo'.
error TS2300: Duplicate identifier 'XMLHttpRequestResponseType'.

error TS2717: Subsequent property declarations must have the same type.  Property 'body' 
must be of type 'string | ArrayBuffer | ArrayBufferView | Blob | FormData | URLSearchParams | ReadableStream<Uint8Array> | null | undefined', 
but here has type 'string | ArrayBuffer | DataView | Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | ... 8 more ... | undefined'. 

error TS2717: Subsequent property declarations must have the same type.  Property 'signal' must be of type 'AbortSignal | null | undefined', but here has type 'AbortSignal | undefined'.

error TS2300: Duplicate identifier 'RequestInfo'.

์ด ์‹œ์ ์—์„œ ๋‚ด๊ฐ€ ์ฑ„ํƒํ•˜๊ณ  ์žˆ๋Š” ์†”๋ฃจ์…˜์€ @types/styled-components ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋‚ด ํ”„๋กœ์ ํŠธ(React ์›น ์•ฑ)๋ฅผ ๊ณ„์† ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰