Rollup-plugin-typescript2: μΈν„°νŽ˜μ΄μŠ€ 선언이 제거된 μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?

에 λ§Œλ“  2017λ…„ 07μ›” 19일  Β·  19μ½”λ©˜νŠΈ  Β·  좜처: ezolenko/rollup-plugin-typescript2

μ•ˆλ…•,

μ›ΉνŒ©μ—μ„œ 라이브러리 λ‘€μ—…μœΌλ‘œ μ΄λ™ν•˜λ €κ³  ν•˜λŠ”λ° 선언이 μ˜¬λ°”λ₯΄κ²Œ μž‘λ™ν•˜λ„λ‘ ν•˜λŠ” 데 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€.

μΈν„°νŽ˜μ΄μŠ€ 선언이 내보내지지 μ•Šμ€ 것 κ°™μŠ΅λ‹ˆλ‹€. λ‹€μŒκ³Ό 같은 κ²½μš°μ— λ¬Έμ œκ°€ λ©λ‹ˆλ‹€.

import { RenderedCell } from "../RenderedCell";

export default class MergedCell implements RenderedCell {
    // ...
}

RenderedCell을 찾을 수 μ—†λ‹€λŠ” 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.
λ‚˜λŠ” webpackμ—μ„œ μΌν–ˆκ³  이것을 깨뜨린 κ΅¬μ„±μ˜ 차이점을 이해할 수 μ—†μŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ Rollupμ—μ„œλŠ” 그것이 μ •μƒμ΄λΌλŠ” 것을 μ΄ν•΄ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

쩝. μ΅œμ‹  λ‘€μ—…, rollup-plugin-typescript2 및 rollup-plugin-uglifyλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. ν•„μš”ν•œ 경우 ꡬ성을 κ²Œμ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

κ·Έλ§Œν•œ κ°€μΉ˜κ°€ 있기 λ•Œλ¬Έμ— λ‘€μ—… 후에 tsc --emitDeclarationOnly ν˜ΈμΆœν•˜λ©΄ μ„ μ–Έ νŒŒμΌμ„ λΉŒλ“œ ν΄λ”λ‘œ μž¬μ •μ˜ν•©λ‹ˆλ‹€.
λ‚΄ package.jsonμ—μ„œ

"scripts": {
    "build": "rollup -c",
    "postbuild: "tsc --emitDeclarationOnly"
}

λͺ¨λ“  19 λŒ“κΈ€

이것은 λŸ°νƒ€μž„ 였λ₯˜μž…λ‹ˆκΉŒ, μ•„λ‹ˆλ©΄ typescript 였λ₯˜μž…λ‹ˆκΉŒ? RenderedCell μžμ²΄μ—μ„œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ‚΄λ³΄λ‚΄λŠ” 방법을 κ²Œμ‹œν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

λ¬Έμ œλŠ” 파일이 μ „ν˜€ μƒμ„±λ˜μ§€ μ•Šκ³  λ‹€λ₯Έ ν”„λ‘œμ νŠΈμ—μ„œ 라이브러리λ₯Ό μ‚¬μš©ν•  λ•Œ μ‹€νŒ¨ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

잠깐, RenderedCell μΈν„°νŽ˜μ΄μŠ€κ°€ 생성될 κ²ƒμœΌλ‘œ μ˜ˆμƒν•˜μ‹­λ‹ˆκΉŒ? typescriptλ₯Ό κ²Œμ‹œν•œ μ½”λ“œμ—μ„œ RenderedCell.ts λΌλŠ” 파일이 ν˜„μž¬ 파일 μœ„μ˜ ν•œ 디렉토리에 μ‘΄μž¬ν•  κ²ƒμœΌλ‘œ μ˜ˆμƒν•˜κ³  λ‹€μŒκ³Ό 같은 λ‚΄μš©μ„ 포함해야 ν•©λ‹ˆλ‹€.

export interface RenderedCell 
{ 
    // ...
}

ν”„λ‘œμ νŠΈ ꡬ쑰에 λŒ€ν•΄ 더 μžμ„Ένžˆ μ„€λͺ…ν•΄ μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ? (파일 트리, tsconfig, λ‘€μ—… ꡬ성 λ“±)

예, μƒμ„±λ˜κΈ°λ₯Ό κΈ°λŒ€ν•©λ‹ˆλ‹€.

λ‚΄ ꡬ성은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

λΉŒλ“œ μ‹€ν–‰: rollup -c -f es -n sq-web-component-table -o dist/sq-web-component-table.es.min.js

κ½€ 큰 라이브러리이고 μ‹ ν˜Έλ³΄λ‹€ λ…Έμ΄μ¦ˆκ°€ 많기 λ•Œλ¬Έμ— 전체 트리λ₯Ό 넣지 μ•Šμ•˜μŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 이미 dist에 μƒμ„±λ˜μ§€ μ•Šμ€ 파일이 λ§Žλ‹€λŠ” 것을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

λ‘€μ—….config.ts

import typescript from 'rollup-plugin-typescript2';
import uglify from 'rollup-plugin-uglify';
import { minify } from 'uglify-es';

export default {
    entry: './src/index.ts',
    dest: 'dist/sq-web-component-table.min.js',
    sourceMap: true,

    plugins: [
        typescript(),
        uglify({}, minify)
    ]
}

tsconfig.json

{
  "compilerOptions": {
    "target": "es5",
    "module": "es2015",
    "moduleResolution": "node",
    "declaration": true,
    "noImplicitAny": true,
    "noImplicitReturns": true,
    "outDir": "dist"
  },
  "include": [
    "src/**/*.ts"
  ],
  "exclude": [
    "dist",
    "node_modules",
    "**/*-test.ts"
  ]
}

RenderedCell.ts

import {RenderedElement} from "./RenderedElement";
import {RenderedRow} from "./RenderedRow";
export interface RenderedCell extends RenderedElement {
    isMergedCell(): boolean;
    getColspan(): number;
    setColspan(colspan: number): void;
    getParent(): RenderedRow;
}

파일 트리

.
β”œβ”€β”€ src
β”‚Β Β  β”œβ”€β”€ index.ts
β”‚Β Β  └── table
β”‚Β Β      β”œβ”€β”€ extensions
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ base
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ FirstTableExtension.ts
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ LastTableExtension.ts
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ SectionDispatcher.ts
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ SectionManager.ts
β”‚Β Β      β”‚Β Β  β”‚Β Β  └── SizeChangeMonitor.ts
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ InvalidateEvent.ts
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ InvalidateSizesEvent.ts
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ RenderedCell.ts
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ RenderedElement.ts
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ RenderedRow.ts
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ RenderedSection.ts
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ RenderedTable.ts
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ SectionClickedEvent.ts
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ support
β”‚Β Β      β”‚Β Β  β”‚Β Β  └── ...
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ TableAttributes.ts
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ TableExtensionChain.ts
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ TableExtensionList.ts
β”‚Β Β      β”‚Β Β  └── TableExtension.ts
β”‚Β Β      β”œβ”€β”€ model
β”‚Β Β      β”‚Β Β  └── ...
β”‚Β Β      β”œβ”€β”€ TableRenderingOptions.ts
β”‚Β Β      β”œβ”€β”€ Table.ts
β”‚Β Β      β”œβ”€β”€ util
β”‚Β Β      β”‚Β Β  └── ...
β”‚Β Β      └── view
β”‚Β Β          └── ...
β”œβ”€β”€ dist
β”‚Β Β  β”œβ”€β”€ index.d.ts
β”‚Β Β  β”œβ”€β”€ sq-web-component-table.es.min.js
β”‚Β Β  β”œβ”€β”€ sq-web-component-table.es.min.js.map
β”‚Β Β  β”œβ”€β”€ sq-web-component-table.min.js
β”‚Β Β  β”œβ”€β”€ sq-web-component-table.min.js.map
β”‚Β Β  └── table
β”‚Β Β      β”œβ”€β”€ extensions
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ base
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ FirstTableExtension.d.ts
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ LastTableExtension.d.ts
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ SectionDispatcher.d.ts
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ SectionManager.d.ts
β”‚Β Β      β”‚Β Β  β”‚Β Β  └── SizeChangeMonitor.d.ts
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ InvalidateEvent.d.ts
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ InvalidateSizesEvent.d.ts
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ RenderedRow.d.ts
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ SectionClickedEvent.d.ts
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ support
β”‚Β Β      β”‚Β Β  β”‚Β Β  └── ...
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ TableAttributes.d.ts
β”‚Β Β      β”‚Β Β  └── TableExtensionList.d.ts
β”‚Β Β      β”œβ”€β”€ model
β”‚Β Β      β”‚Β Β  └── ...
β”‚Β Β      β”œβ”€β”€ Table.d.ts
β”‚Β Β      β”œβ”€β”€ util
β”‚Β Β      β”‚Β Β  └── ...
β”‚Β Β      └── view
β”‚Β Β          └── ...
β”œβ”€β”€ node_modules
β”‚Β Β  └── ...
β”œβ”€β”€ __tests__
β”‚Β Β  └── ...
β”œβ”€β”€ package.json
β”œβ”€β”€ rollup.config.js
└── tsconfig.json

μ•„, μ•Œκ² μŠ΅λ‹ˆλ‹€. ν˜Ήμ‹œ libκ°€ μ˜€ν”ˆ μ†ŒμŠ€μž…λ‹ˆκΉŒ?

λ‹€μŒ μ˜΅μ…˜μœΌλ‘œ λΉŒλ“œν•΄ λ³΄μ„Έμš”.

typescript({ verbosity: 2, clean: true }),

μ˜ˆμƒν•œ λͺ¨λ“  파일이 처리되고 μžˆλŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€. 선언이 κ°‘μžκΈ° μƒμ„±λ˜κΈ° μ‹œμž‘ν•˜λ©΄ μ–΄λ”˜κ°€μ— μΊμ‹œ λ¬Έμ œκ°€ μžˆλŠ” κ²ƒμž…λ‹ˆλ‹€.

RenderedCell.tsκ°€ 좜λ ₯( rpt2: transpiling '...' )에 μ–ΈκΈ‰λ˜μ§€ μ•Šμ€ 경우 상세도λ₯Ό 3으둜 늘리고 κ°€μ Έμ˜€κΈ°λ‘œ λ˜μ–΄ μžˆλŠ” 파일이 κ·Έλ ‡κ²Œ ν•˜κ³  μžˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€. 당신은 λ‹€μŒκ³Ό 같은 κ²ƒμ„λ³΄μ•„μ•Όν•©λ‹ˆλ‹€

rpt2: resolving '../RenderedCell'
rpt2:     to '...'

λ¬Έμ œκ°€ λͺ…ν™•ν•˜μ§€ μ•Šμ€ 경우 μ–΄λ”˜κ°€μ— λ‘œκΉ…μ„ 더 μΆ”κ°€ν•˜κ² μŠ΅λ‹ˆλ‹€.

ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. μ•„λ§ˆλ„ λ―Έλž˜μ— μžˆμ„ κ²ƒμž…λ‹ˆλ‹€ :)

트릭 κ°μ‚¬ν•©λ‹ˆλ‹€. μ›”μš”μΌμ— μ‹œλ„ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€.

tsconfig의 compilerOptions μ„Ήμ…˜μ—μ„œ declaration: false λ₯Ό μ„€μ •ν•˜κ³  λ‹€μ‹œ μ»΄νŒŒμΌν•˜λ©΄ λ¬Έμ œκ°€ ν•΄κ²°λ©λ‹ˆκΉŒ? κ·Έλ ‡λ‹€λ©΄ TSCμ—μ„œ λ³΄κ³ ν•œ 였λ₯˜κ°€ dist 디렉토리 λ‚΄μ˜ 파일 쀑 ν•˜λ‚˜μ™€ κ΄€λ ¨λ˜μ–΄ μžˆμŠ΅λ‹ˆκΉŒ? λ‘˜ λ‹€ 예라고 λ‹΅ν•œ 경우 κ°„λ‹¨ν•œ ν•¨μˆ˜ 내보내기와 같이 RenderedCell 파일이 ν¬ν•¨λœ νŒŒμΌμ— μœ ν˜•μ΄ μ•„λ‹Œ 논리λ₯Ό λ„μž…ν•˜λ©΄ 였λ₯˜κ°€ μ‚¬λΌμ§‘λ‹ˆκΉŒ? κ·Έλ ‡λ‹€λ©΄ κ·Έ μ΄μœ λŠ” RenderedCell κ°€ ν¬ν•¨λœ 파일이 μ‚¬μš©λ˜μ§€ μ•Šμ€ κ²ƒμœΌλ‘œ κ°„μ£Όλ˜κ³  Typescriptκ°€ 이에 λŒ€ν•œ 선언을 μ€€λΉ„ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

이 λͺ¨λ“  것이 κ·€ν•˜μ—κ²Œ μ μš©λ˜λŠ” 경우 2가지 μ˜΅μ…˜μ΄ ν‘œμ‹œλ©λ‹ˆλ‹€.

  • λ²ˆλ“€μ— λŒ€ν•œ μ„ μ–Έ 생성을 μ€‘μ§€ν•©λ‹ˆλ‹€.
  • μœ ν˜•κ³Ό 관련이 μ—†λŠ” νŒŒμΌμ— λ³€κ²½ 사항을 λ„μž…ν•˜μ—¬ 둀업이 νŒŒμΌμ„ μ™„μ „νžˆ 흔듀지 μ•Šλ„λ‘ ν•©λ‹ˆλ‹€. 예, ν•΄ν‚Ήμž…λ‹ˆλ‹€. 더 λ‚˜μ€ 방법을 μ°ΎκΈΈ λ°”λžλ‹ˆλ‹€.

μ•ˆλ…•,

였랜 지연에 λŒ€ν•΄ μ£„μ†‘ν•©λ‹ˆλ‹€. κ·€ν•˜μ˜ 팁과 νŠΈλ¦­μ„ μ‹œλ„ν–ˆμ§€λ§Œ μ—¬μ „νžˆ μƒμ„±λœ μΈν„°νŽ˜μ΄μŠ€μ— λŒ€ν•œ μœ ν˜• μ •μ˜λ₯Ό 얻을 수 μ—†μŠ΅λ‹ˆλ‹€.

ꡬ성을 typescript({ verbosity: 3, clean: true }) .
μƒμ„±λœ λΉŒλ“œμ˜ 좜λ ₯μ—λŠ” RenderedCell μΈν„°νŽ˜μ΄μŠ€μ— λŒ€ν•œ 언급이 μ—†μŠ΅λ‹ˆλ‹€.

라이브러리의 index.d.ts κ°€ 직접 ν•„μš”ν•˜κ³  μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œμ™Έν•œ λͺ¨λ“  파일이 μƒμ„±λ˜μ§€λ§Œ μΈν„°νŽ˜μ΄μŠ€λŠ” μ—¬μ „νžˆ index.d.ts 의 κ°€μ Έμ˜€κΈ°μ— μžˆμœΌλ―€λ‘œ 이 파일이 ν•„μš”ν•˜λ‹€κ³  100% ν™•μ‹ ν•©λ‹ˆλ‹€. 파일.

ν•΄λ‹Ή 파일이 μƒμ„±λ˜μ§€ μ•ŠλŠ” νŠΉλ³„ν•œ μ΄μœ κ°€ μžˆλŠ”μ§€ μ•Œμ•„λ³΄κΈ° μœ„ν•΄ μ½”λ“œλ₯Ό μžμ„Ένžˆ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

@wessberg λ‚΄ λ²ˆλ“€μ— λŒ€ν•œ μ„ μ–Έ 생성 μ€‘μ§€λŠ” TypeScript둜 μž‘μ„±λœ 더 큰 ν”„λ‘œμ νŠΈμ˜ 일뢀인 λΌμ΄λΈŒλŸ¬λ¦¬μ΄λ―€λ‘œ μ˜΅μ…˜μ΄ μ•„λ‹™λ‹ˆλ‹€. λ”°λΌμ„œ 타이핑이 μ—†μœΌλ©΄ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

κ·Έλž˜μ„œ λͺ‡ 가지 쑰사λ₯Ό ν•˜κ³  μ΅œμ†Œν•œμ˜ ꡬ성 μ„ΈνŠΈλ‘œ 제 사둀λ₯Ό μž¬ν˜„ν•˜λŠ” 리포지토리λ₯Ό λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. https://github.com/onigoetz/typescript-rollup-experiment

λ˜ν•œ μ›ΉνŒ©μ΄ μž‘λ™ν•˜λŠ” 방식을 λΉ„κ΅ν•˜κΈ° μœ„ν•΄ μ›ΉνŒ© ꡬ성을 ν¬ν•¨ν–ˆμŠ΅λ‹ˆλ‹€.

λ¬Έμ œμ— λŒ€ν•œ λ‚˜μ˜ μ΄ν•΄λŠ” rollup-plugin-typescript2κ°€ 파일의 컴파일된 버전을 μš”κ΅¬ν•  λ•Œ(index.ts라고 ν•˜μž) TypescriptλŠ” 컴파일된 파일과 κ°€μ Έμ˜€κΈ°λ₯Ό λ°˜ν™˜ν•˜μ§€λ§Œ κ°€μ Έμ˜€κΈ°μ— μΈν„°νŽ˜μ΄μŠ€κ°€ μ—†λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

이것이 둀업이 μƒμ„±ν•˜μ§€ μ•ŠλŠ” μ΄μœ μž…λ‹ˆλ‹€. 둀업은 쑴재λ₯Ό μΈμ‹ν•˜μ§€ λͺ»ν•©λ‹ˆλ‹€.

μ €μž₯μ†Œλ₯Ό μ‹€ν–‰ν•˜λ €λ©΄ 디렉토리 λ‚΄μ—μ„œ npm install && npm run build λ₯Ό μˆ˜ν–‰ν•˜μ‹­μ‹œμ˜€.

μΆ”κ°€ν•˜λŠ” 경우:
import "./SomeInterface"; index.ts νŒŒμΌμ— import "./SomeInterface"; (μ •ν™•νžˆ 그와 같이 - λͺ…λͺ…λœ 바인딩 없이)λ₯Ό μΆ”κ°€ν•˜λ©΄ μž‘λ™ν•΄μ•Ό ν•©λ‹ˆλ‹€. ν•©λ‹ˆκΉŒ?

λΆˆν–‰νžˆλ„, 둀업은 μœ ν˜• μ„ μ–Έλ§Œ ν¬ν•¨ν•˜λŠ” 파일과 같은 μ„ μ–Έ μ „μš© νŒŒμΌμ— λŒ€ν•œ ν”ŒλŸ¬κ·ΈμΈμ˜ λ³€ν™˜ ν•Έλ“€λŸ¬λ₯Ό ν˜ΈμΆœν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μœ„μ˜ μž‘μ—…μ€ Rollup이 νŒŒμΌμ„ ν‰κ°€ν•˜λ„λ‘ ν•˜κΈ° λ•Œλ¬Έμ— μž‘λ™ν•΄μ•Ό ν•©λ‹ˆλ‹€. 이 문제: https://github.com/rollup/rollup-plugin-typescript/issues/28μ—μ„œ 이 λ¬Έμ œκ°€ λ°œμƒν•˜λŠ” 방법과 이유λ₯Ό μ„€λͺ…ν•©λ‹ˆλ‹€. 이둠적으둜 μ§„μž…μ μ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λͺ¨λ“  쒅속성을 μˆ˜λ™μœΌλ‘œ ν•΄κ²°ν•˜κ³  μœ ν˜• μ„ μ–Έλ§Œ ν¬ν•¨ν•˜λŠ” 쒅속성을 κ²°μ •ν•  수 μžˆμ§€λ§Œ 둀업이 λ³€ν™˜ 후크λ₯Ό ν˜ΈμΆœν•˜λ„λ‘ κ°•μ œν•  방법은 μ—†μŠ΅λ‹ˆλ‹€(λ§Žμ€ μΆ”κ°€ λΉŒλ“œ 단계 λ³΅μž‘μ„±κ³Ό 같은 λ‹€λ₯Έ λͺ…λ°±ν•œ 단점 μ œμ™Έ). ).

λ‘€μ—… 자체λ₯Ό λ³€κ²½ν•˜μ§€ μ•Šκ³ λŠ” 이에 λŒ€ν•΄ λ§Žμ€ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μ—†μŠ΅λ‹ˆλ‹€. μ§€κΈˆ 은 λ‚΄κ°€ μ„€λͺ…ν•œ "ν•΄ν‚Ή" ν•΄μ•Ό ν•©λ‹ˆλ‹€.

λ„€, 방금 ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€. ν…ŒμŠ€νŠΈ μ €μž₯μ†Œμ— import "./SomeInterface"; λ₯Ό μΆ”κ°€ν•˜λ©΄ λ¬Έμ œκ°€ ν•΄κ²°λ©λ‹ˆλ‹€.

μœ ν˜•λ§Œ κ°€μ Έμ˜¬ λ•Œ typescriptλŠ” js 좜λ ₯μ—μ„œ ​​import 문을 μƒλž΅ν•˜κ³  둀업은 ν•΄λ‹Ή νŒŒμΌμ„ 보지 μ•ŠμœΌλ―€λ‘œ νŠΈλžœμŠ€νŒŒμΌμ„ μœ„ν•΄ 보내지 μ•ŠμŠ΅λ‹ˆλ‹€.

λ””μŠ€ν¬μ—μ„œ μš”μ²­ν•œ 파일 μœ ν˜• λŒ€ νŠΈλžœμŠ€νŒŒμΌμ„ μœ„ν•΄ 보낸 파일 둀업을 속이고 λͺ¨λ‹ˆν„°λ§ν•˜λ €κ³  ν•©λ‹ˆλ‹€. μ •μ˜ μ „μš© ν”Œλž˜κ·Έλ₯Ό μ‚¬μš©ν•˜μ—¬ 차이점을 κ°•μ œ λ³€ν™˜ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. 이둜 인해 μ–΄λ–€ κ²½μš°μ—λŠ” λ„ˆλ¬΄ λ§Žμ€ d.t 파일이 생성될 수 μžˆμŠ΅λ‹ˆλ‹€(예λ₯Ό λ“€μ–΄ 둀업이 νŠΈλ¦¬μ—μ„œ ν•©λ²•μ μœΌλ‘œ 흔듀린 경우).

쑰사해 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. 이에 λŒ€ν•΄ κΈ°μ—¬ν•  수 μžˆλŠ”μ§€λ„ ν™•μΈν•˜κ² μŠ΅λ‹ˆλ‹€.

@onigoetz , μ’‹μ•„, λ§ˆμŠ€ν„°μ™€ ν•¨κ»˜ ν”„λ‘œμ νŠΈλ₯Ό μ‹œλ„ν•˜μ‹­μ‹œμ˜€. μ˜¬λ°”λ₯Έ 선언이 μƒμ„±λ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜λ˜ 예기치 μ•Šμ€ 선언이 μ—†λŠ”μ§€ ν™•μΈν•˜μ„Έμš”. :)

ꡉμž₯ν•©λ‹ˆλ‹€, 당신은 λ‚΄κ°€ μžκ³ μžˆλŠ” λ™μ•ˆ 그것을 μ™„μ „νžˆ κ³ μ³€μŠ΅λ‹ˆλ‹€ :)

λ‚˜λŠ” 그것을 ν…ŒμŠ€νŠΈν–ˆκ³  거의 잘 μž‘λ™ν•©λ‹ˆλ‹€.

μ•½κ°„μ˜ λ¬Έμ œκ°€ μžˆμ§€λ§Œ μš°λ¦¬κ°€ ν•  수 μžˆλŠ” 일이라고 μƒκ°ν•©λ‹ˆλ‹€. μ›ΉνŒ© λ‘œλ”κ°€ μ •ν™•νžˆ λ™μΌν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜κ³  파일 λͺ©λ‘μ€ TypeScript μžμ²΄μ—μ„œ μƒμ„±λ©λ‹ˆλ‹€.

μ˜ˆλ‘œμ„œ; λ‚΄ μ €μž₯μ†Œμ— μ„Έ 개의 파일이 μžˆλŠ” 경우:

  • index.ts μˆ˜μž… SomeInterface.ts
  • SomeInterface.ts
  • nongenerated.ts μˆ˜μž… SomeInterface.ts

nongenerated.ts λŠ” μ°Έμ‘°λ˜μ§€ μ•Šμ§€λ§Œ ν•΄λ‹Ή μœ ν˜•μ€ μ–΄μ¨Œλ“  μƒμ„±λ©λ‹ˆλ‹€.

멋진, ν…ŒμŠ€νŠΈ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. 쑰금 μžˆλ‹€κ°€ λ‹€λ₯Έ λ¬Έμ œκ°€ ν™•μΈλ˜λ©΄ κ³΅κ°œν•˜κ² μŠ΅λ‹ˆλ‹€.

λ„€, 둀업을 μš°νšŒν•  λ•Œ μš°λ¦¬κ°€ ν•  수 μžˆλŠ” 일은 λ§Žμ§€ μ•ŠμŠ΅λ‹ˆλ‹€. exclude μ˜΅μ…˜μ—μ„œ ν•΄λ‹Ή νŒŒμΌμ„ μˆ˜λ™μœΌλ‘œ μ œμ™Έν•  수 μžˆμ–΄μ•Ό ν•˜μ§€λ§Œ μ΄λŠ” 쒋지 μ•Šμ€ ν•΄κ²° λ°©λ²•μž…λ‹ˆλ‹€.

μ’‹μ•„, μ§€κΈˆ 0.5.1μ—μ„œ

잘 μž‘λ™ν•©λ‹ˆλ‹€. tsconfig.json을 κ΅¬μ„±ν•˜μ‹­μ‹œμ˜€.

{
    "compilerOptions": {
        "module": "es2015",
        "target": "es5",
        "declaration":true,
        "declarationDir": "lib",
        "typeRoots": [
            "node_modules/@six006",
            "node_modules/@types"
        ],
        "lib": [
            "es2015",
            "es2017",
            "es5"
        ],
    },
    "include": [
        "src/index.ts",
        "src/module/**/*.ts"
    ],
    "exclude": [
        "node_modules"
    ]
}

include μ„Ήμ…˜μ—μ„œ 생성할 ν•­λͺ©μ„ μ•Œλ €μ€λ‹ˆλ‹€.

YMMV ν•˜μ§€λ§Œ μ΄λ ‡κ²Œ μž‘λ™ν•˜λ„λ‘ ν–ˆμŠ΅λ‹ˆλ‹€ ...

~ 전에

export type MyType = { ... };

~ 후에

type MyType = { ... };

export { MyType }

κ·Έλ§Œν•œ κ°€μΉ˜κ°€ 있기 λ•Œλ¬Έμ— λ‘€μ—… 후에 tsc --emitDeclarationOnly ν˜ΈμΆœν•˜λ©΄ μ„ μ–Έ νŒŒμΌμ„ λΉŒλ“œ ν΄λ”λ‘œ μž¬μ •μ˜ν•©λ‹ˆλ‹€.
λ‚΄ package.jsonμ—μ„œ

"scripts": {
    "build": "rollup -c",
    "postbuild: "tsc --emitDeclarationOnly"
}
이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰