Tslint: ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Ρ‹ строгого Ρ‚ΠΈΠΏΠ°: Π»ΠΎΠΆΠ½ΠΎΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ индСксов

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 22 июн. 2017  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: palantir/tslint

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ± ошибкС

  • __TSLint вСрсия__: 5.4.3 5cf7100ad3c7b2fd3be62d94b7b4708460590a97
  • __TypeScript version__: 2.4.0
  • __ Запуск TSLint Ρ‡Π΅Ρ€Π΅Π·__: CLI

ΠžΡ‚Π½ΠΎΡΠΈΡ‚ΡΡ ΠΊ: https://github.com/Microsoft/TypeScript/issues/13778

Π›ΠΈΠ½Ρ‚ΠΈΠ½Π³ ΠΊΠΎΠ΄Π° TypeScript

declare function get<T>(): T;
// index types
{
    get<{ [key: string]: string }>()['foo'] === undefined
    get<{ [key: string]: string }>()['foo'] === null
    get<{ [key: string]: string }>()['foo'] == undefined
    get<{ [key: string]: string }>()['foo'] == null

    get<{ [index: number]: string }>()[0] === undefined
    get<{ [index: number]: string }>()[0] === null
    get<{ [index: number]: string }>()[0] == undefined
    get<{ [index: number]: string }>()[0] == null
}

с ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ tslint.json :

(Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ test/rules/strict-type-predicates/strict-null-checks/tsconfig.json )

ЀактичСскоС / ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅

(A Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ, E ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎ, B - ΠΎΠ±Π°)

{
    get<{ [key: string]: string }>()['foo'] === undefined
A:  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [Expression is always false.]
    get<{ [key: string]: string }>()['foo'] === null
B:  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [Expression is always false.]
    get<{ [key: string]: string }>()['foo'] == undefined
A:  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [Expression is always false.]
E:  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [Use '=== undefined' instead.]
    get<{ [key: string]: string }>()['foo'] == null
A:  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [Expression is always false.]
E:  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [Use '=== undefined' instead.]

    get<{ [index: number]: string }>()[0] === undefined
A:  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [Expression is always false.]
    get<{ [index: number]: string }>()[0] === null
B:  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [Expression is always false.]
    get<{ [index: number]: string }>()[0] == undefined
A:  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [Expression is always false.]
E:  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [Use '=== undefined' instead.]
    get<{ [index: number]: string }>()[0] == null
A:  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [Expression is always false.]
E:  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [Use '=== undefined' instead.]
}

(ΠŸΡ€ΠΈΠΌΠ΅Ρ€ выполнСния находится здСсь: https://github.com/ypresto/tslint/tree/strict-type-predicates-index-type)

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π‘ΠΎΠ»Π΅Π΅ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

const foo: { [key: string]: string } = {}
if (foo.bar === undefined) {
    // blah
}

Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ

ERROR: /Users/yuya/repo/github.com-private/codetakt/pf-user-admin/client/test.ts[2, 5]: Expression is always false.

Π½ΠΎ ошибки Π½Π΅ оТидаСтся.

ВсС 3 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π‘ΠΎΠ»Π΅Π΅ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

const foo: { [key: string]: string } = {}
if (foo.bar === undefined) {
    // blah
}

Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ

ERROR: /Users/yuya/repo/github.com-private/codetakt/pf-user-admin/client/test.ts[2, 5]: Expression is always false.

Π½ΠΎ ошибки Π½Π΅ оТидаСтся.

tslint - нСподходящСС мСсто для добавлСния Ρ‚Π°ΠΊΠΎΠΉ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π­Ρ‚ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ измСнСния Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚ΠΈΠΏΠ° машинописного тСкста. https://github.com/Microsoft/TypeScript/issues/13778

Если Π²Ρ‹ всСгда провСряСтС Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ undefined ΠΏΠ΅Ρ€Π΅Π΄ использованиСм значСния, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ свою подпись индСкса, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ undefined ;

const foo: { [key: string]: string | undefined } = {}

+1 ΠΊ ajafff ​​- Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это дизайнСрская Ρ‚ΠΎΡ‡ΠΊΠ° TypeScript.

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ

Π‘ΠΌΠ΅ΠΆΠ½Ρ‹Π΅ вопросы

dashmug picture dashmug  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

ghost picture ghost  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

adidahiya picture adidahiya  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

cretz picture cretz  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

allbto picture allbto  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ