Tslint: 'μœ μΆ”ν•  수 μ—†λŠ” μœ ν˜•' 및 'typedef' κ·œμΉ™μ΄ μΆ©λŒν•©λ‹ˆλ‹€.

에 λ§Œλ“  2015λ…„ 10μ›” 03일  Β·  33μ½”λ©˜νŠΈ  Β·  좜처: palantir/tslint

μ•ˆλ…• λ‹€μ‹œ,

이것이 λ¬Έμ œμΈμ§€ λ””μžμΈ 결정인지 ν™•μ‹€ν•˜μ§€ μ•Šμ§€λ§Œ no-inferrebale-types 및 typedef κ·œμΉ™ μ‚¬μ΄μ˜ μΆ©λŒμ„ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

μ „.

function fn(): void {
    for (let i = 0; i < 100; i++) {
        console.log(i);
    }
}

https://github.com/palantir/tslint/blob/master/docs/sample.tslint.json 의 μŠ€λ‹ˆνŽ«:

 "typedef": [true, ...],
 "no-inferrable-types": true,

이 두 가지 κ·œμΉ™μ„ 켜면 λ‹€μŒκ³Ό 같은 κ²°κ³Όκ°€ λ‚˜νƒ€λ‚©λ‹ˆλ‹€.

error (typedef) test.ts[2, 12]: expected variable-declaration: 'i' to have a typedef

i λ³€μˆ˜μ— μœ ν˜• 주석 number 을 μΆ”κ°€ν•˜λ©΄ μ°¨λ‘€λ‘œ λ‹€μŒ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

error (no-inferrable-types) test.ts[2, 14]: LHS type (number) inferred by RHS expression, remove type annotation

이 두 가지 κ·œμΉ™μ„ ν•¨κ»˜ μ‚¬μš©ν•  수 μžˆλŠ” 방법이 μžˆμŠ΅λ‹ˆκΉŒ?

예λ₯Ό λ“€μ–΄, κΈ°λ³Έ μœ ν˜•(κ·œμΉ™ λ¬Έμ„œμ—μ„œ number , boolean λ˜λŠ” string )으둜 직접 μ„ μ–Έλœ μΆ”λ‘  κ°€λŠ₯ν•œ λ³€μˆ˜λ₯Ό κ°–κ³  μ‹Άμ§€λ§Œ λ‹€λ₯Έ ν•œνŽΈμœΌλ‘œλŠ” 기본이 μ•„λ‹Œ μœ ν˜•μ— λŒ€ν•œ typedefλ₯Ό κ°•μ œ μ‹€ν–‰ν•©λ‹ˆλ‹€.

감사 ν•΄μš”,

μ˜ν˜•.

P1 Enhancement 🌹 R.I.P. 🌹

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

:+1: μ΄μƒμ μœΌλ‘œλŠ” (imo) "μœ ν˜•μ΄ μœ μΆ” κ°€λŠ₯ν•œ κ²½μš°κ°€ μ•„λ‹ˆλ©΄ 항상 typedefκ°€ ν•„μš”ν•©λ‹ˆλ‹€"라고 λ§ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. μ§€κΈˆμ€ λΆˆκ°€λŠ₯ν•˜λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

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

잘 μž‘μ•˜μŠ΅λ‹ˆλ‹€. 미리 μ•Œλ €μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. no-inferrable-types κ·œμΉ™μ΄ typedef κ·œμΉ™κ³Ό μΆ©λŒν•  수 μžˆλ‹€λŠ” 생각 없이 no-inferrable-types κ·œμΉ™μ„ μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. μ§€κΈˆμ€ λ‘˜ 쀑 ν•˜λ‚˜λ₯Ό λ„κ±°λ‚˜ typedef κ·œμΉ™μ˜ 일뢀 μ˜΅μ…˜λ§Œ μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

μž₯기적으둜 no-inferrable-types λ₯Ό typedef κ·œμΉ™μ— ν†΅ν•©ν•˜κ±°λ‚˜ μ΅œμ†Œν•œ TSLintκ°€ 두 κ·œμΉ™μ„ λͺ¨λ‘ μ‚¬μš©ν•˜λŠ” 것과 같이 μΆ©λŒν•˜λŠ” ꡬ성을 κ°μ§€ν•˜λ„λ‘ ν•  κ²ƒμž…λ‹ˆλ‹€.

λ‚˜λŠ” 같은 λ¬Έμ œμ— 직면 ν•΄μžˆλ‹€.
μ§€κΈˆμ€ μΆ”λ‘ ν•  수 μ—†λŠ” μœ ν˜•μ„ ν•΄μ œν–ˆμŠ΅λ‹ˆλ‹€.

예, μ—¬κΈ°μ—μ„œλ„ λ§ˆμ°¬κ°€μ§€μž…λ‹ˆλ‹€. 두 κ·œμΉ™μ΄ 곡쑴할 수 μžˆλŠ” κΈ°λŠ₯을 κ°–κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.
λ³€μˆ˜μ˜ μœ ν˜•μ„ μœ μΆ”ν•  수 μžˆλŠ” 경우 typedef κ·œμΉ™μ΄ μ‹œμž‘λ˜λŠ” 것을 μ›ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
즉, "μΆ”λ‘ ν•  수 μ—†λŠ” μœ ν˜•"이 "typedef"보닀 μš°μ„ ν•΄μ•Ό ν•©λ‹ˆλ‹€.

+1

let id: number = 0;
for (let job: string of NAMES_PROFFESSIONS) {
     /** some code */
     id++;
}

(no-inferrable-types) RHS μ‹μœΌλ‘œ μœ μΆ”λœ LHS μœ ν˜•(숫자), μœ ν˜• 주석 제거

+1

"μΆ”λ‘  κ°€λŠ₯ν•œ" μœ ν˜•μ— λŒ€ν•œ μ •μ˜μ— μƒμ„±μž 할당이 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆκΉŒ?

// BAD (this hurts my eyes to read)
let labels: Map<string, string> = new Map<string, string>();
// GOOD (type is obvious)
let labels = new Map<string, string>();

ν•˜μ§€λ§Œ λ˜ν•œ...

// BAD (in a diff, it's not obvious what this type is)
let labels = this.buildLabels();
// GOOD
let labels: Map<string, string> = this.buildLabels();

예, μœ„ν—˜ν•©λ‹ˆλ‹€. λ‚΄ μ½”λ“œλ₯Ό λ‹¨μˆœν™”ν•˜κ³  직접 μ΄ˆκΈ°ν™”λœ λ³€μˆ˜μ— λŒ€ν•œ μœ ν˜• 선언을 μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ €λ©΄ μ—„κ²©ν•˜κ²Œ 이 μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μ—†μœΌλ©° λ‹€μŒκ³Ό 같은 κ²°κ³Όκ°€ λ°œμƒν•©λ‹ˆλ‹€.

let x = 2;
let y;
let z: number;

x = 1;
y = 1;
z = 1;
x = 's'; // Type 'string' is not assignable to type 'number'
y = 's'; // It's OK
z = 's'; // Type 'string' is not assignable to type 'number'

μ΄ˆκΈ°ν™”λœ λ³€μˆ˜μ— λŒ€ν•΄μ„œλ§Œ μœ ν˜• 선언을 κ±΄λ„ˆλ›°λ„λ‘ ν—ˆμš©ν•˜λŠ” 것은 맀우 μœ μš©ν•œ μ˜΅μ…˜μΌ 수 μžˆμŠ΅λ‹ˆλ‹€.

... 그리고 @pgonzal 이 λ§ν–ˆλ“―μ΄ μ›μ‹œ μœ ν˜•μ—λ§Œ ν•΄λ‹Ήλ˜λŠ” 것은 μ•„λ‹™λ‹ˆλ‹€!
이것 봐, 끔찍해

const onChange: () => void = () => this.update();

:+1: μ΄μƒμ μœΌλ‘œλŠ” (imo) "μœ ν˜•μ΄ μœ μΆ” κ°€λŠ₯ν•œ κ²½μš°κ°€ μ•„λ‹ˆλ©΄ 항상 typedefκ°€ ν•„μš”ν•©λ‹ˆλ‹€"라고 λ§ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. μ§€κΈˆμ€ λΆˆκ°€λŠ₯ν•˜λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

λ‚˜λŠ” 이것에 λΆ€λ”ͺν˜€ λ‚΄ κ²½μš°μ— λ„μ›€μ΄λ˜λŠ” ignore-params ν”Œλž˜κ·Έλ₯Ό λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. μ‰½κ²Œ μœ μΆ”ν•  수 μžˆλŠ” κ²½μš°μ—λ„ λͺ¨λ“  λ©”μ„œλ“œ/ν•¨μˆ˜ λ§€κ°œλ³€μˆ˜μ— λŒ€ν•΄ typedefλ₯Ό κ°•μ œ μ μš©ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

μ‚¬μš©ν•΄ 보렀면 PR: #1190을 μ°Έμ‘°ν•˜μ„Έμš”.

원본 λ¬Έμ œκ°€ 제좜된 지 μ˜€λž˜λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 이 μ‹œμ μ—μ„œ ꢌμž₯ μ˜΅μ…˜μ€ no-inferrable-types λ₯Ό λΉ„ν™œμ„±ν™”ν•˜κ³  λͺ¨λ“  ν•­λͺ©μ— μœ ν˜•μ„ ν¬ν•¨ν•˜λŠ” κ²ƒμž…λ‹ˆκΉŒ? no-inferrable-types 및 typedef λ₯Ό λͺ¨λ‘ μ‹œλ„ν•˜κ³  ν™œμ„±ν™”ν•˜κ³  κ²°ν•©ν•˜λŠ” λ‹€λ₯Έ λͺ¨λ“  것은 ν•΄ν‚Ήμ²˜λŸΌ 보이며 λ§Žμ€ λ¬΄μ˜λ―Έν•œ κ²½κ³ λ₯Ό μ΄ˆλž˜ν•©λ‹ˆλ‹€. κ°€κΉŒμš΄ μ‹œμΌ 내에 더 λ‚˜μ€ μ†”λ£¨μ…˜μ„ κΈ°λŒ€ν•©λ‹ˆλ‹€.

@corydeppen μœ„μ˜ @englercj μ œμ•ˆμ— λŒ€ν•΄ 8개의 엄지손가락을 μΉ˜μΌœμ„Έμ›λ‹ˆλ‹€. κ·€ν•˜μ˜ "ν•΄ν‚Ήμ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€" λŒ“κΈ€μ—μ„œ "κ²°ν•©"이 무엇을 μ˜λ―Έν•˜λŠ”μ§€ λͺ…ν™•ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. " tslint.json μ—μ„œ ν•¨κ»˜ μ‚¬μš©"을 μ˜λ―Έν•œλ‹€λ©΄ κ·Έλ ‡μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ typedef 에 λŒ€ν•œ optional-inferrable-types 인수λ₯Ό "κ²°ν•©"ν•˜λŠ” 것은 ν›Œλ₯­ν•  κ²ƒμž…λ‹ˆλ‹€(적어도 우리 쀑 9λͺ…μ—κ²ŒλŠ”).

이에 λŒ€ν•œ μ—…λ°μ΄νŠΈλ₯Ό 받을 수 μžˆμŠ΅λ‹ˆκΉŒ?

이것을 μ²˜λ¦¬ν•˜λŠ” κ°€μž₯ 쒋은 방법은 no-inferrable-types λ₯Ό 더 이상 μ‚¬μš©ν•˜μ§€ μ•Šκ³  $#$ typedef initialized μ˜΅μ…˜ 개체λ₯Ό μ „λ‹¬ν•˜μ—¬ νŠΉμ • νŒ¨ν„΄μ— 따라 μœ ν˜•μ„ μΆ”λ‘ ν•  수 μžˆλŠ” 경우 μœ ν˜• μ •μ˜μ˜ 뢀쑱을 λ¬΄μ‹œν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. initialized primitives , call signatures 및 κ°œλ°œμžλ‘œμ„œ 우리의 μš”κ΅¬λ₯Ό μΆ©μ‘±μ‹œν‚¬ 기타 νŒ¨ν„΄.

λ‚˜μ—κ²Œ 이것은 더 μ˜λ―Έκ°€ μžˆμŠ΅λ‹ˆλ‹€. μ™œλƒν•˜λ©΄ 그것이 ν•¨μˆ˜μ˜ μœ ν˜•μ΄ 무엇인지 μ•Œλ €μ£ΌλŠ” 것이 μ—†λ‹€λ©΄ 항상 typedefκ°€ μžˆμ–΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ call signatures κ°€ μ•„λ‹Œ ν΄λž˜μŠ€μ—μ„œ μ΄ˆκΈ°ν™”λœ properties κ°€ μΆ”λ‘  κ°€λŠ₯ν•œ μœ ν˜•μ„ 가지기λ₯Ό μ›ν•˜κΈ° λ•Œλ¬Έμ— ꡬ성 κ°€λŠ₯ν•©λ‹ˆλ‹€.

λˆ„κ΅°κ°€κ°€ 이 문제λ₯Ό ν•΄κ²°ν•  수 μžˆλ‹€λ©΄ 쒋을 κ²ƒμž…λ‹ˆλ‹€. κ·Έλ•ŒκΉŒμ§€ μš°λ¦¬λŠ” "읽을 수 μžˆλŠ” ν˜•μ‹ 선언이 μΆ©λΆ„ν•˜μ§€ μ•ŠμŒ"κ³Ό "λ„ˆλ¬΄ λ§Žμ€ ν˜•μ‹ μ„ μ–ΈμœΌλ‘œ λ³΅μž‘ν•¨" μ€‘μ—μ„œ 선택해야 ν•©λ‹ˆλ‹€.

이 λ¬Έμ œλŠ” 2015λ…„ 10μ›” 3일뢀터 κ³΅κ°œλ˜μ—ˆμŠ΅λ‹ˆλ‹€. κ·Έ μ΄ν›„λ‘œ 저희 νŒ€μ€ λ„ˆλ¬΄ λ§Žμ€ μœ ν˜• μ„ μ–ΈμœΌλ‘œ 인해 μ–΄μˆ˜μ„ ν•œ μ•½ 2000개의 TypeScript μ†ŒμŠ€ νŒŒμΌμ„ μž‘μ„±ν–ˆμŠ΅λ‹ˆλ‹€.

typedef ꡬ성을 μˆ˜λ½ν•©λ‹ˆλ‹€. λ”°λΌμ„œ μœ ν˜•μ΄ μœ μΆ” κ°€λŠ₯ν•œ 경우 μœ ν˜• μ •μ˜λ₯Ό λ¬΄μ‹œν•˜λŠ” 또 λ‹€λ₯Έ ꡬ성일 수 μžˆμŠ΅λ‹ˆλ‹€.

μ΄ˆκΈ°ν™”λ˜μ§€ μ•ŠλŠ” 곳에 μž…λ ₯ν•˜λ©΄ λ©λ‹ˆλ‹€.

문제λ₯Ό μ–΄λ–»κ²Œ μ²˜λ¦¬ν•΄μ•Ό ν•˜λŠ”μ§€μ— λŒ€ν•œ λͺ…ν™•ν•œ ν•©μ˜κ°€ 이루어지지 μ•Šμ•„ 진전이 μ—†λŠ” κ²ƒμœΌλ‘œ λ³΄μž…λ‹ˆλ‹€. 주석 μ˜ˆμ‹œ: https://github.com/theia-ide/theia/issues/356#issuecomment -319350833

λ‚˜λŠ” 우리 λͺ¨λ‘κ°€ μ–΄λ–€ 해결책이든 μžˆλŠ” κ·ΈλŒ€λ‘œ λ‘λŠ” 것보닀 λ‚«λ‹€λŠ” 데 λ™μ˜ν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. 이 λ¬Έμ œμ™€ κ΄€λ ¨ν•˜μ—¬ ν˜„μƒ μœ μ§€μ— λŒ€ν•œ λ³€κ²½ 사항이 μ’‹λ‹€κ³  μƒκ°ν•˜μ‹œλ©΄ 이 λŒ“κΈ€μ„ πŸ‘ λΆ€νƒν•©λ‹ˆλ‹€. 이 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ PR을 μž‘μ„±ν•  만큼 지식이 μžˆλ‹€λ©΄ 우리 λͺ¨λ‘λ₯Ό λ„μ™€μ£Όμ„Έμš” ❀️ .

λ‹€μŒκ³Ό 같은 경우 PR을 μˆ˜λ½ν•©λ‹ˆλ‹€.

  • typedef 에 μ˜΅μ…˜μ„ μΆ”κ°€ν•˜μ—¬ no-inferrable-types μ—μ„œ μœ ν˜•μ„ μ œκ³΅ν•˜μ§€ 말라고 ν•˜λŠ” 경우λ₯Ό λ¬΄μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

typedefλŠ” ꡬ성을 ν—ˆμš©ν•©λ‹ˆλ‹€. λ”°λΌμ„œ μœ ν˜•μ΄ μœ μΆ” κ°€λŠ₯ν•œ 경우 μœ ν˜• μ •μ˜λ₯Ό λ¬΄μ‹œν•˜κΈ° μœ„ν•œ 또 λ‹€λ₯Έ ꡬ성일 수 μžˆμŠ΅λ‹ˆλ‹€. 즉, 'μ΄ˆκΈ°ν™”λ˜μ§€ μ•Šμ€ μœ„μΉ˜μ— μž…λ ₯ν•˜μ‹­μ‹œμ˜€.'

typedef κ·œμΉ™μ€ μ½”λ“œλ² μ΄μŠ€μ— λͺ…μ‹œμ  μœ ν˜• μ •μ˜λ₯Ό κ°–κ³  μ‹Άμ–΄ν•˜λŠ” μ‚¬λžŒλ“€μ„ μœ„ν•œ κ²ƒμž…λ‹ˆλ‹€. μœ„μ˜ λ™μž‘μ΄ "μ΄ˆκΈ°ν™”λ˜μ§€ μ•Šμ€ λͺ¨λ“  μœ„μΉ˜μ— μž…λ ₯"ν•˜λ„λ‘ ν•˜λ €λ©΄ typedef λ₯Ό λΉ„ν™œμ„±ν™”ν•˜κ³  TypeScript 컴파일러 μ˜΅μ…˜μœΌλ‘œ noImplictAny λ₯Ό ν™œμ„±ν™”ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

λ‹€μŒ μŠ€λ‹ˆνŽ«κ³Ό 같이 μ΄ˆκΈ°ν™”λœ 일뢀 ν•­λͺ©μ— μ–΄μ¨Œλ“  typedefκ°€ ν•„μš”ν•œ κΉŒλ‹€λ‘œμš΄ κ²½μš°λ„ μžˆμŠ΅λ‹ˆλ‹€.

interface Literal {
    field: "value"
}

const literal0 = {
    field: "value",
};
const literal1: Literal = {
    field: "value",
};

const func = (obj: Literal) => { };
func(literal0);  // Error! Type 'string' is not assignable to type '"value"'.
func(literal1);

λ˜ν•œ 이 문제λ₯Ό ν•΄κ²°ν•˜λŠ” λ™μ•ˆ no-unnecessary-type-annotation (https://github.com/ajafff/tslint-consistent-codestyle/blob/)와 같은 ν›Œλ₯­ν•œ 타사 κ·œμΉ™μ΄ μžˆμ„ 수 μžˆμŒμ„ μ–ΈκΈ‰ν•˜κ³  μ‹Άμ—ˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ master/docs/no-unnecessary-type-annotation.md). μ›ν•˜λŠ” λ™μž‘μ„ μ œκ³΅ν•˜λŠ” λ‹€λ₯Έ 타사 κ·œμΉ™μ„ μ•Œκ³  μžˆλŠ” μ‚¬λžŒμ΄ μžˆλŠ” 경우 여기에 κ²Œμ‹œν•΄ μ£Όμ‹œλ©΄ κ³΅μ‹μ μœΌλ‘œ ꢌμž₯ν•˜κ±°λ‚˜ νƒ€λ‹Ήν•œ 경우 핡심에 채택할 수 μžˆμŠ΅λ‹ˆλ‹€.

@JKillian μΆ”μ²œ κ°μ‚¬ν•©λ‹ˆλ‹€. μ‹€μ œλ‘œ μ œκ°€ μ›ν–ˆλ˜ 것 κ°™μ•„μš”. any μœ ν˜•μ„ ν”Όν•˜λŠ” 것에 λŒ€ν•œ μ•„μ£Ό 쒋은 κ²Œμ‹œλ¬Όμ΄ μžˆμŠ΅λ‹ˆλ‹€. "naked any"λ₯Ό μ‚¬μš©ν•˜μ§€ 말고 λŒ€μ‹  "any interface"λ₯Ό λ§Œλ“œμ‹­μ‹œμ˜€.

에 λŒ€ν•œ:

interface Literal {
    field: "value"
}

const literal0 = {
    field: "value",
};
const literal1: Literal = {
    field: "value",
};

const func = (obj: Literal) => { };
func(literal0);  // Error! Type 'string' is not assignable to type '"value"'.
func(literal1);

λ‚˜λŠ” 이것이 μ–΄λ–»κ²Œ λ°”λžŒμ§ν•˜μ§€ μ•Šμ€ ν–‰λ™μ΄λ‚˜ κΉŒλ‹€λ‘œμš΄ κ²½μš°μΈμ§€ μ•Œ 수 μ—†μŠ΅λ‹ˆλ‹€. obj 값이 value 인 $#$ field $#$ 속성이 μžˆλŠ”μ§€ ν™•μΈν•˜κ³  μ œμ•½ 쑰건처럼 λ³΄μ΄λŠ” μ†μ„±μœΌλ‘œ literal0 λ₯Ό μ΄ˆκΈ°ν™”ν•˜λŠ” κ²½μš°μ—λ„ , λ‹€λ₯Έ λ¬Έμžμ—΄λ‘œ μˆ˜μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

쒋은 μ‚¬μš© μ‚¬λ‘€λŠ” μ•„λ‹ˆμ§€λ§Œ λŒ€λΆ€λΆ„μ˜ 경우 λ¦¬ν„°λŸ΄μ„ μ‚¬μš©ν•˜λŠ” 경우 기본이 μ•„λ‹Œ ν•΄λ‹Ή λ¦¬ν„°λŸ΄μ„ 원할 κ²ƒμž…λ‹ˆλ‹€.

λ‹€μŒ ꡬ성이 μžˆμŠ΅λ‹ˆλ‹€.
json "no-inferrable-types": true, "typedef": [true, "call-signature", "parameter"],
그리고 이 μ½”λ“œ:
javascript private static readonly DEVICE_UID: string = 'device_uid'; private static readonly DEVICE_PLATFORM: string = 'browser'; private static readonly AGENT_DEFAULT_ICON = 'http://localhost:3000/icon.png';

두 개의 첫 번째 μ„ μ–Έμ—μ„œ 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?

@sandrocsimas ν₯미둭지 만 μ£Όμ œκ°€ μ•„λ‹Œ 것 κ°™μŠ΅λ‹ˆλ‹€. AFAICT ν•΄λ‹Ή λ¬Έμ œλŠ” 이 λ¬Έμ œμ™€ 관련이 μ—†μŠ΅λ‹ˆλ‹€. λ‹€λ₯Έ 문제λ₯Ό μ‹œμž‘ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€(fwiw!).

@estaub λ„€, κ·Έλ ‡κ²Œ ν•˜κ² μŠ΅λ‹ˆλ‹€. typedef κ·œμΉ™μ΄ 없어도 λ™μΌν•œ λ™μž‘μ΄ λ°œμƒν•©λ‹ˆλ‹€.

@sandrocsimas λŠ” 읽기 μ „μš© 속성이고 μ΄λŸ¬ν•œ TypescriptλŠ” ν•΄λ‹Ή μœ ν˜•μ„ λ¦¬ν„°λŸ΄λ‘œ μœ μΆ”ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. 그것을 λ¬Έμžμ—΄λ‘œ μž…λ ₯ν•˜λ©΄ λ¬Έμžμ—΄μ΄ μžˆμ–΄μ•Ό 함을 μ˜λ―Έν•©λ‹ˆλ‹€. λ°˜λ“œμ‹œ ν•΄λ‹Ή λ¦¬ν„°λŸ΄ 값을 κ°€μ§ˆ ν•„μš”λŠ” μ—†μœΌλ©° 값이 μ •μ μœΌλ‘œ λ³€κ²½λ˜μ–΄μ„œλŠ” μ•ˆ λ©λ‹ˆλ‹€.

'typedef-except-inferrable' κ·œμΉ™μ΄ 있으면 쒋을 κ²ƒμž…λ‹ˆλ‹€.

@JKillian 이 λ§ν–ˆλ“―μ΄ @FiretronP75 λŠ” TSC의 noImplicitAny μ˜΅μ…˜μΌ λΏμž…λ‹ˆλ‹€.

@michaeljota κ°μ‚¬ν•©λ‹ˆλ‹€. 컴파일러의 noImplicitAny μ˜΅μ…˜μ΄ μΆ”λ‘ ν•  수 μžˆλŠ” μ˜ˆμ™Έλ₯Ό μ œκ³΅ν•œλ‹€λŠ” 것을 λͺ°λžμŠ΅λ‹ˆλ‹€. κ·Έλž˜λ„ μ»΄νŒŒμΌμ„ μ€‘λ‹¨ν•˜λŠ” λŒ€μ‹  κ²½κ³ λ₯Ό λ§Œλ“œλŠ” μ˜΅μ…˜κ³Ό tslint 주석 ν”Œλž˜κ·Έλ₯Ό κ°–λŠ” μ˜΅μ…˜μ„ μœ„ν•΄ tslint에 있으면 쒋을 κ²ƒμž…λ‹ˆλ‹€.

이것이 μ›ν•˜λŠ” 이유λ₯Ό μ•Œμ§€λ§Œ no-unused-variables λ₯Ό 예둜 λ“€λ©΄ TSCμ—μ„œ λ‹€λ£¨λŠ” μ‚¬μš© 사둀가 TSLint νŒ€μ—μ„œ μ§€μ›λ˜μ§€ μ•Šμ„ 것이라고 μƒκ°ν•©λ‹ˆλ‹€. λ‚˜λŠ” 그것이 _컴파일러 였λ₯˜_와 같은 _λ¦°ν„° 였λ₯˜_κ°€ μ•„λ‹ˆλΌλŠ” 것을 μ•Œκ³  μžˆμ§€λ§Œ κ²°κ΅­ λ‘˜ λ‹€ 더 λ‚˜μ€ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” 것에 κ΄€ν•œ κ²ƒμž…λ‹ˆλ‹€. TSC 였λ₯˜κ°€ μžˆλŠ” κ²½μš°μ—λ„ μ½”λ“œλ₯Ό μ»΄νŒŒμΌν•˜κ³  μ‹€ν–‰ν•  수 μžˆλŠ” Webpack λ˜λŠ” Parcelκ³Ό 같은 μ†”λ£¨μ…˜μ΄ μžˆλŠ” μš”μ¦˜μ—λŠ” 이것이 μ‹€μ œ 문제둜 보이지 μ•ŠμŠ΅λ‹ˆλ‹€.

μ΅œμ‹  λ²„μ „μ—μ„œλŠ” ν•΄κ²°λ˜μ—ˆλ‚˜μš”?

λ‚˜λŠ” 이것이 λ‘œλ“œλ§΅μ— 아직 μ—†λ‹€κ³  μƒκ°ν•œλ‹€. TSCμ—μ„œ noImplicitAny μ‚¬μš©μ„ κ³ λ €ν•΄μ•Ό ν•©λ‹ˆλ‹€.

☠️ TSLint의 μ‹œκ°„μ΄ μ™”μŠ΅λ‹ˆλ‹€! ☠️

TSLintλŠ” #4534에 λ”°λ₯Έ λŒ€λΆ€λΆ„μ˜ κΈ°λŠ₯ μš”μ²­μ„ 더 이상 μˆ˜λ½ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ESLint 둜 TypeScript μ½”λ“œλ₯Ό λ¦°νŠΈν•˜λŠ” μƒˆλ‘­κ³  λΉ›λ‚˜λŠ” 방법은 typescript-eslint.io λ₯Ό μ°Έμ‘°ν•˜μ„Έμš”. ✨

μ—¬λŸ¬λΆ„κ³Ό ν•¨κ»˜ 즐거운 μ˜€ν”ˆμ†Œμ‹±μ΄μ—ˆμŠ΅λ‹ˆλ‹€!

πŸ€– 삐삐! πŸ‘‰ TSLintλŠ” 더 이상 μ‚¬μš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ πŸ‘ˆ _(#4534)_ 그리고 typescript-eslint 둜 μ „ν™˜ ν•΄μ•Ό ν•©λ‹ˆλ‹€! πŸ€–

πŸ”’ 이 μ΄μŠˆλŠ” 더 μ΄μƒμ˜ λΆˆν•„μš”ν•œ 토둠을 λ°©μ§€ν•˜κΈ° μœ„ν•΄ 잠그고 μžˆμŠ΅λ‹ˆλ‹€. κ°μ‚¬ν•©λ‹ˆλ‹€! πŸ‘‹

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰