Tslint: TypeScript μ½”λ”© 지침은 μΈν„°νŽ˜μ΄μŠ€μ— Iλ₯Ό μ ‘λ‘μ‚¬λ‘œ μ‚¬μš©ν•˜μ§€ 말라고 λ§ν•©λ‹ˆλ‹€.

에 λ§Œλ“  2017λ…„ 09μ›” 30일  Β·  15μ½”λ©˜νŠΈ  Β·  좜처: palantir/tslint

버그 μ‹ κ³ 

  • __TSLint 버전__: 3.15.1
  • __TypeScript 버전__: 2.5.3
  • ____λ₯Ό 톡해 TSLint μ‹€ν–‰: (ν•˜λ‚˜ 선택) CLI

λ¦°νŠΈλ˜λŠ” TypeScript μ½”λ“œ

// code snippet
interface TypeConfig { }

μ‹€μ œ 행동

[tslint] μΈν„°νŽ˜μ΄μŠ€ 이름은 λŒ€λ¬Έμž I(μΈν„°νŽ˜μ΄μŠ€ 이름)으둜 μ‹œμž‘ν•΄μ•Ό ν•©λ‹ˆλ‹€.

MicrosoftλŠ” μΈν„°νŽ˜μ΄μŠ€ 이름에 I 접두사가 뢙지 μ•Šλ„λ‘ μ œμ•ˆν•©λ‹ˆλ‹€. - https://github.com/Microsoft/TypeScript/wiki/Coding-guidelines#names

Question

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

μ‹ κ²½ 쓰지 λ§ˆμ„Έμš”. λ‚˜λŠ” 그것을 μ•Œμ•„ λƒˆμŠ΅λ‹ˆλ‹€.

{
  "extends": [
    "tslint:recommended",
    "tslint-react",
    "tslint-config-prettier"
  ],
  "linterOptions": {
    "exclude": [
      "config/**/*.js",
      "node_modules/**/*.ts"
    ]
  },
  "rules": {
    "interface-name" : [true, "never-prefix"]
  }
}

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

이것은 νƒ€μž…μŠ€ν¬λ¦½νŠΈ 컴파일러 자체λ₯Ό μž‘μ„±ν•˜κΈ° μœ„ν•œ μ§€μΉ¨μž…λ‹ˆλ‹€. λ‹€λ₯Έ μ–΄λ–€ typescript ν”„λ‘œμ νŠΈμ˜ μŠ€νƒ€μΌ κ°€μ΄λ“œλ„ μ•„λ‹™λ‹ˆλ‹€.
ν”„λ‘œμ νŠΈμ— 이 μŠ€νƒ€μΌ κ°€μ΄λ“œλ₯Ό μ μš©ν•˜λ €λ©΄ tslint.json의 κ·œμΉ™ ꡬ성을 "interface-name" : [true, "never"]

ν–‰μΈμ—κ²Œμ„œ 50μ„ΌνŠΈ:
"interface-name" : [true, "never-prefix"] λŒ€μ‹ 
"interface-name" : [true, "never"]
πŸ™Œ

κ·œμΉ™ λ¬Έμ„œ

Create React Appμ—μ„œ μƒμ„±λœ κΈ°λ³Έ tslint.json interface-name을 μΆ”κ°€ν•˜μ—¬ "I" 접두사λ₯Ό 끄렀고 ν–ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μž‘λ™ν•˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. λ‚΄κ°€ 잘λͺ»λœ μœ„μΉ˜μ— λ„£κ³  μžˆλŠ” 것은 μ•„λ‹κΉŒ?

{
  "extends": [
    "tslint:recommended",
    "tslint-react",
    "tslint-config-prettier"
  ],
  "linterOptions": {
    "exclude": [
      "config/**/*.js",
      "node_modules/**/*.ts"
    ]
  },
  "interface-name" : [true, "never-prefix"]
}

μ‹ κ²½ 쓰지 λ§ˆμ„Έμš”. λ‚˜λŠ” 그것을 μ•Œμ•„ λƒˆμŠ΅λ‹ˆλ‹€.

{
  "extends": [
    "tslint:recommended",
    "tslint-react",
    "tslint-config-prettier"
  ],
  "linterOptions": {
    "exclude": [
      "config/**/*.js",
      "node_modules/**/*.ts"
    ]
  },
  "rules": {
    "interface-name" : [true, "never-prefix"]
  }
}

μ–΄λ–€ 이유둜 "interface-name": [true, "never"] 이(κ°€) μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ "interface-name": false λŠ” 잘 μž‘λ™ν•©λ‹ˆλ‹€.

@vasilev-alex "interface-name": [true, "never-prefix"] μ ˆλŒ€ 접두사 κ°•μ‘°

μ—¬μ „νžˆ "interface name must start with a capitalized I" λ°›κ³  μžˆμŠ΅λ‹ˆλ‹€.

이것은 λ‚΄ tslint.jsonμž…λ‹ˆλ‹€.

{
  "rules": {
    "interface-name": [
      true,
      "never-prefix"
    ]
  },
  "extends": [
    "tslint:recommended",
    "tslint-react",
    "tslint-config-prettier"
  ],
  "linterOptions": {
    "exclude": [
      "config/**/*.js",
      "node_modules/**/*.ts",
      "coverage/lcov-report/*.js"
    ]
  }
}

λ‚΄κ°€ 무엇을 잘λͺ»ν•˜κ³  μžˆμ§€?

@offg777 λΆ„λͺ…ν•œ 것은 μ—†μŠ΅λ‹ˆλ‹€. 레포 링크?

ꡬ성이 μ •ν™•ν•΄ λ³΄μž…λ‹ˆλ‹€. 이 ꡬ성을 μž¬μ •μ˜ν•˜λŠ” λ‹€λ₯Έ 것이 μ—†μŠ΅λ‹ˆκΉŒ? κ·œμΉ™μ€ ν™•μ‹€νžˆ λ‚˜λ₯Ό μœ„ν•΄ μ œλŒ€λ‘œ μž‘λ™ν•©λ‹ˆλ‹€

@offg777

"μΈν„°νŽ˜μ΄μŠ€ 이름은 λŒ€λ¬Έμž I둜 μ‹œμž‘ν•΄μ•Ό ν•©λ‹ˆλ‹€."

이 였λ₯˜λŠ” μ–΄λ””μ„œ λ°œμƒν•©λ‹ˆκΉŒ? IDEμ—μ„œ λ˜λŠ” CLIλ₯Ό μ‹€ν–‰ν•  λ•Œ?
그리고 tslint의 μ •ν™•ν•œ 계단식 κ·œμΉ™μ— λŒ€ν•΄μ„œλŠ” λͺ¨λ₯΄μ§€λ§Œ "ν™•μž₯" μ•„λž˜μ— "κ·œμΉ™" 블둝을 λ„£μ–΄ λ³΄μ…¨μŠ΅λ‹ˆκΉŒ?

μ—„μ²­λ‚œ

eslintλŠ” 이미 그것을 μ§€μ›ν•©λ‹ˆκΉŒ?

ν™˜κ²½

"rules": {
    "interface-name": [
      true,
      "never-prefix"
    ]
  },

κ²°κ³Ό
Configuration for rule "interface-name" is invalid

이 κ·œμΉ™μ΄ μ‘΄μž¬ν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ? λͺ¨λ“  μΈν„°νŽ˜μ΄μŠ€λŠ” κ΅¬ν˜„ ν΄λž˜μŠ€μ™€ λΆ„λͺ…νžˆ λ‹€λ₯Έ 의미 μžˆλŠ” 이름을 κ°€μ Έμ•Ό ν•©λ‹ˆκΉŒ?

이것은 _μžμ‹ μ˜ ν”„λ‘œμ νŠΈ μ™ΈλΆ€μ—μ„œ_ λ‹Ήμ‹ μ˜ μ„ ν˜Έλ„λ₯Ό λ‹€λ₯Έ μ‚¬λžŒλ“€μ΄ λ”°λ₯΄λ„둝 κ°•μš”ν•˜λŠ” μ§€λ…ν•œ μ„±κ°€μ‹  μƒκ°μž…λ‹ˆλ‹€. ν”„λ‘œκ·Έλž˜λ° λ„κ΅¬μ—μ„œ μžμ‹ μ˜ λͺ…λͺ… κ·œμΉ™μ„ λ°©ν•΄ν•˜λŠ” 것은 μ œν’ˆ 개발자 μ‹ κ²½λ§μ˜ λ²„κ·Έμž…λ‹ˆλ‹€.)

쒋은 점은 TSLintκ°€ 더 이상 μ‚¬μš©λ˜μ§€ μ•ŠμœΌλ©° 이 λ¬Έμ œλŠ” 더 이상 관련이 μ—†λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€! #4534

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