Tslint: 'рдиреЛ-рдЗрдиреНрдлрд░реЗрдмрд▓-рдЯрд╛рдЗрдкреНрд╕' рдФрд░ 'рдЯрд╛рдЗрдкрд┐рдлрд╝' рдирд┐рдпрдо рд╡рд┐рд░реЛрдз

рдХреЛ рдирд┐рд░реНрдорд┐рдд 3 рдЕрдХреНрддреВре░ 2015  ┬╖  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

рдЯрд╛рдЗрдк рдПрдиреЛрдЯреЗрд╢рди number рдХреЛ рд╡реЗрд░рд┐рдПрдмрд▓ i рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдмрджрд▓реЗ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ:

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

рдХреНрдпрд╛ рдЗрди рджреЛрдиреЛрдВ рдирд┐рдпрдореЛрдВ рдХреЛ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╕рд╣-рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рд░рдЦрдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ?

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕реАрдзреЗ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдШреЛрд╖рд┐рдд рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдЪрд░ рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (рдЬреИрд╕рд╛ рдХрд┐ рдирд┐рдпрдо рдбреЙрдХреНрдЯрд░ рдХрд╣рддрд╛ рд╣реИ: number , boolean рдпрд╛ string ), рд▓реЗрдХрд┐рди рджреВрд╕рд░реА рдУрд░, рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдБ рдЯрд╛рдЗрдкрдкреАрдл рдХреЛ рдЧреИрд░-рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдзрдиреНрдпрд╡рд╛рдж,

рдУ

P1 Enhancement ЁЯМ╣ R.I.P. ЁЯМ╣

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

: +1: рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ (рдЖрдИрдПрдордУ) рдореИрдВ рдХрд╣рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ "рд╣рдореЗрд╢рд╛ рдЯрд╛рдЗрдкрд┐рдлрд╝ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдкреНрд░рдХрд╛рд░ рдЕрдиреБрдорд╛рдирд┐рдд рди рд╣реЛ"ред рдЬреЛ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЕрднреА рд╕рдВрднрд╡ рд╣реИред

рд╕рднреА 33 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЕрдЪреНрдЫрд╛ рдХреИрдЪ, рд╣реЗрдб-рдЕрдк рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВрдиреЗ no-inferrable-types рдирд┐рдпрдо рдХреЛ рдмрд┐рдирд╛ рдпрд╣ рд╕реЛрдЪреЗ рдЬреЛрдбрд╝рд╛ рдХрд┐ рдпрд╣ typedef рдирд┐рдпрдо рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рд╡рд┐рд░реЛрдз рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдУрд╣! рдЕрднреА рдХреЗ рд▓рд┐рдП рдореИрдВ рджреЛ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ, рдпрд╛ рдХреЗрд╡рд▓ typedef рдирд┐рдпрдо рдХреЗ рдХреБрдЫ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ред

рд▓рдВрдмреЗ рд╕рдордп рддрдХ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдпрд╛ рддреЛ no-inferrable-types рдХреЛ typedef рдирд┐рдпрдо рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдпрд╛ рд╣рдо рдХрдо рд╕реЗ рдХрдо TSLint рдХреЛ рдкрд░рд╕реНрдкрд░ рд╡рд┐рд░реЛрдзреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдЬреИрд╕реЗ рджреЛрдиреЛрдВ рдирд┐рдпрдо рдЪрд╛рд▓реВ рд╣реИрдВред

рдореИрдВ рдПрдХ рд╣реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред
рдореИрдВрдиреЗ рдЕрднреА рдХреЗ рд▓рд┐рдП рдиреЛ-рдЗрдиреНрдлрд░реЗрдмрд▓-рдЯрд╛рдЗрдкреНрд╕ рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рд╣реИред

рд╣рд╛рдБ рдпрд╣рд╛рдБ рд╡рд╣реА, рдореИрдВ рджреЛрдиреЛрдВ рдирд┐рдпрдореЛрдВ рдХреЛ рд╕рд╣-рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБред
рдпрджрд┐ рдЪрд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддреЛ рдореИрдВ рдЯрд╛рдЗрдкрд┐рдлрд╝ рдирд┐рдпрдо рдХреЛ рдХрд┐рдХ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред
рдпрд╛рдиреА "рдиреЛ-рдЗрдиреНрдлрд░реЗрдмрд▓-рдЯрд╛рдЗрдкреНрд╕" рдХреЛ "рдЯрд╛рдЗрдкрдкреАрдл" рдкрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП

+1

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

(рдиреЛ-рдЗрдиреНрдлрд░реЗрдмрд▓-рдЯрд╛рдЗрдкреНрд╕) рдПрд▓рдПрдЪрдПрд╕ рдЯрд╛рдЗрдк (рдирдВрдмрд░) рдЖрд░рдПрдЪрдПрд╕ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдорд╛рдирд┐рдд, рдЯрд╛рдЗрдк рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рд╣рдЯрд╛ рджреЗрдВ

+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: рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ (рдЖрдИрдПрдордУ) рдореИрдВ рдХрд╣рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ "рд╣рдореЗрд╢рд╛ рдЯрд╛рдЗрдкрд┐рдлрд╝ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдкреНрд░рдХрд╛рд░ рдЕрдиреБрдорд╛рдирд┐рдд рди рд╣реЛ"ред рдЬреЛ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЕрднреА рд╕рдВрднрд╡ рд╣реИред

рдореИрдВ рдЗрд╕рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ рдФрд░ рдПрдХ ignore-params рдЭрдВрдбрд╛ рдмрдирд╛рдпрд╛ рдЬреЛ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЯрд╛рдЗрдкрдкреАрдл рдХреЛ рд╕рднреА рд╡рд┐рдзрд┐/рдлрд╝рдВрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рднрд▓реЗ рд╣реА рдЙрдиреНрд╣реЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рдкреАрдЖрд░ рджреЗрдЦреЗрдВ: #1190 рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ рдЖрдЬрдорд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ

рдореВрд▓ рдЕрдВрдХ рд╕рдмрдорд┐рдЯ рдХрд┐рдП рд╣реБрдП рдХреБрдЫ рд╕рдордп рд╣реЛ рдЧрдпрд╛ рд╣реИред рдХреНрдпрд╛ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЕрдиреБрд╢рдВрд╕рд╛ рд╡рд┐рдХрд▓реНрдк no-inferrable-types рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдФрд░ рд╕рдм рдХреБрдЫ рдкрд░ рдкреНрд░рдХрд╛рд░ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ? no-inferrable-types рдФрд░ typedef рджреЛрдиреЛрдВ рдХреЛ рдЖрдЬрдорд╛рдиреЗ рдФрд░ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдФрд░ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдХреБрдЫ рднреА рдПрдХ рд╣реИрдХ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╡реНрдпрд░реНрде рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╣реЛрддрд╛ рд╣реИред рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рдХреА рдЙрдореНрдореАрдж рд╣реИред

@corydeppen рдКрдкрд░ рджрд┐рдП рдЧрдП @englercj рдХреЗ рд╕реБрдЭрд╛рд╡ рдкрд░ 8 рдердореНрд╕ рдЕрдк рдиреЛрдЯ рдХрд░реЗрдВред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреА "рд╣реИрдХ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ" рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ "рдЧрдардмрдВрдзрди" рдХрд╛ рдЕрд░реНрде рдХреНрдпрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХрд╛ рдорддрд▓рдм рд╣реИ " tslint.json рдореЗрдВ рдПрдХ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рддреЛ, рд╣рд╛рдБред рд▓реЗрдХрд┐рди typedef рдкрд░ typedef optional-inferrable-types рддрд░реНрдХ "рд╕рдВрдпреЛрдЬрди" рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ (рдХрдо рд╕реЗ рдХрдо, рд╣рдо рдореЗрдВ рд╕реЗ 9 рдХреЗ рд▓рд┐рдП)ред

рдХреНрдпрд╛ рд╣рдореЗрдВ рдЗрд╕ рдкрд░ рдЕрдкрдбреЗрдЯ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ, рдХреГрдкрдпрд╛?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ no-inferrable-types рдХреЛ рдмрд╣рд┐рд╖реНрдХреГрдд рдХрд░рдирд╛ рд╣реИ рдФрд░ рдЯрд╛рдЗрдк рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреА рдХрдореА рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП typedef рдкрд░ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реИ, рдпрджрд┐ рдкреНрд░рдХрд╛рд░ рдХреБрдЫ рдкреИрдЯрд░реНрд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрдиреБрдорд╛рдирд┐рдд рд╣реИ, рддреЛ initialized , initialized primitives , call signatures рдФрд░ рдЕрдиреНрдп рдкреЗрдЯреЗрдВрдЯ рдЬреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдорд╛рд░реА рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдВрдЧреЗред

рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрд╢рд╛ рдПрдХ рдЯрд╛рдЗрдкрд┐рдлрд╝ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрдм рддрдХ рдХрд┐ рдХреБрдЫ рдЖрдкрдХреЛ рдпрд╣ рди рдмрддрд╛рдП рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХрд╛рд░реНрдп рд╣реИред рдФрд░ рдпрд╣ рд╡рд┐рдиреНрдпрд╛рд╕ рдпреЛрдЧреНрдп рднреА рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рд╡рд░реНрдЧ рдореЗрдВ рдЖрд░рдВрднрд┐рдХ properties рдХреЛ рдЕрдиреБрдорд╛рдирд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП call signatures рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред

рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдХреЛрдИ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд┐рдЪ рдХрд░ рд╕рдХреЗред рддрдм рддрдХ, рд╣рдореЗрдВ "рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛рдПрдВ рдирд╣реАрдВ" рдмрдирд╛рдо "рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд" рдХреЗ рдмреАрдЪ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣ рдореБрджреНрджрд╛ 3 рдЕрдХреНрдЯреВрдмрд░ 2015 рд╕реЗ рдЦреБрд▓рд╛ рд╣реИ -- рддрдм рд╕реЗ, рдореЗрд░реА рдЯреАрдо рдиреЗ рд▓рдЧрднрдЧ 2000 рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрд░реЛрдд рдлрд╛рдЗрд▓реЗрдВ рд▓рд┐рдЦреА рд╣реИрдВ, рдЬреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛рдУрдВ рд╕реЗ рднрд░реА рд╣реБрдИ рд╣реИрдВред

typedef рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рддреЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдк рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдПрдХ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реЛ, рдпрджрд┐ рдкреНрд░рдХрд╛рд░ рдЕрдиреБрдорд╛рдирд┐рдд рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ

рдЬрд╣рд╛рдВ рднреА рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рд╡рд╣рд╛рдВ рдмрд╕ рдЯрд╛рдЗрдк рдХрд░реЗрдВред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯрд╛ рдЬрд╛рдП, рдЗрд╕ рдкрд░ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рд╕рд╣рдорддрд┐ рдирд╣реАрдВ рд╣реИ, рдХреЛрдИ рдкреНрд░рдЧрддрд┐ рдирд╣реАрдВ рд╣реЛ рд░рд╣реА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдЯрд┐рдкреНрдкрдгреА: https://github.com/theia-ide/theia/issues/356#issuecomment -319350833

рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд╣рдо рд╕рднреА рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рдХреЛрдИ рднреА рд╕рдорд╛рдзрд╛рди рдЪреАрдЬреЛрдВ рдХреЛ рд╡реИрд╕реЗ рд╣реА рдЫреЛрдбрд╝рдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред рдЕрдЧрд░ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдпрдерд╛рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдЕрдЪреНрдЫрд╛ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ ЁЯСН рдпрд╣ рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреАрдЖрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рд╣рдо рд╕рднреА рдХреА рдорджрдж рдХрд░реЗрдВ тЭдя╕Пред

рдПрдХ рдкреАрдЖрд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВрдЧреЗ:

  • typedef рдореЗрдВ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рдЗрд╕реЗ рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ no-inferrable-types рдПрдХ рдкреНрд░рдХрд╛рд░ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИ

рдЯрд╛рдЗрдкрд┐рдлрд╝ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рддреЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдк рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдПрдХ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реЛ, рдпрджрд┐ рдкреНрд░рдХрд╛рд░ рдЕрдиреБрдорд╛рдирд┐рдд рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ 'рдЬрд╣рд╛рдБ рдХрд╣реАрдВ рднреА рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред'

typedef рдирд┐рдпрдо рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдЕрдкрдиреЗ рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рд░рдЦрдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЙрдкрд░реЛрдХреНрдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ "рдЬрд╣рд╛рдБ рднреА рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдмрд╕ рдЯрд╛рдЗрдк рдХрд░реЗрдВ" рдХреА рдЗрдЪреНрдЫрд╛ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк typedef рдХреЛ рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдВрдкрд╛рдЗрд▓рд░ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ noImplictAny рд╕рдХреНрд╖рдо рд╣реИред

рдПрдХ рдореБрд╢реНрдХрд┐рд▓ рдорд╛рдорд▓рд╛ рднреА рд╣реИ рдЬрд╣рд╛рдВ рдХреБрдЫ рдЪреАрдЬреЗрдВ рдЬреЛ рдкреНрд░рд╛рд░рдВрдн рдХреА рдЬрд╛рддреА рд╣реИрдВ рдЙрдиреНрд╣реЗрдВ рдЯрд╛рдЗрдкрд┐рдлрд╝ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдирд┐рдореНрди рд╕реНрдирд┐рдкреЗрдЯ рдореЗрдВ рд╣реИ:

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 рдкреНрд░рдХрд╛рд░ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рдкреЛрд╕реНрдЯ рд╣реИ: "рдирдЧреНрди рдХреЛрдИ" рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп "рдХреЛрдИ рдЗрдВрдЯрд░рдлрд╝реЗрд╕" рдмрдирд╛рдПрдВред

рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ:

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 рдХреА рд╕рдВрдкрддреНрддрд┐ field рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореВрд▓реНрдп value рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЬрдм рдЖрдк 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 , рд╣рд╛рдБ рдореИрдВ рдХрд░реВрдБрдЧрд╛ред рдореБрдЭреЗ рдЯрд╛рдЗрдкрд┐рдлрд╝ рдирд┐рдпрдо рдХреЗ рдмрд┐рдирд╛ рднреА рд╡рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред

@sandrocsimas рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдкрдардиреАрдп рд╕рдВрдкрддреНрддрд┐ рд╣реИ, рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреА рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрд╕рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╢рд╛рдмреНрджрд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрдорд╛рдирд┐рдд рдХрд░рддреА рд╣реИред рдЗрд╕реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░рдХреЗ рдЖрдк рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдпрд╣ рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рдЗрд╕рдХрд╛ рд╢рд╛рдмреНрджрд┐рдХ рдореВрд▓реНрдп рд╣реЛрдЧрд╛ рдФрд░ рдорд╛рди рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред

'рдЖрд╡рд╢реНрдпрдХрддрд╛-рдЯрд╛рдЗрдкрдкреАрдл-рдЫреЛрдбрд╝рдХрд░-рдЕрдиреБрдорд╛рдирд┐рдд' рдирд┐рдпрдо рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ред

@ FiretronP75 рдЬреИрд╕рд╛ рдХрд┐ @JKillian рдиреЗ рдХрд╣рд╛, рдпрд╣ TSC рдХрд╛ рд╕рд┐рд░реНрдл noImplicitAny рд╡рд┐рдХрд▓реНрдк рд╣реИред

@michaeljota рдзрдиреНрдпрд╡рд╛рдж, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рдирд╣реАрдВ рд╣реБрдЖ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ noImplicitAny рд╡рд┐рдХрд▓реНрдк рдЕрдиреБрдорд╛рди рдХреЗ рд▓рд┐рдП рдЕрдкрд╡рд╛рдж рджреЗрддрд╛ рд╣реИред tslint рдореЗрдВ рд╣реЛрдирд╛ рдЕрднреА рднреА рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдВрдХрд▓рди рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕реЗ рдЪреЗрддрд╛рд╡рдиреА рдмрдирд╛рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП, рдФрд░ tslint рдЯрд┐рдкреНрдкрдгреА рдЭрдВрдбреЗ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдПред

рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреБрдЫ рдХреНрдпреЛрдВ рдЪрд╛рд╣рд┐рдП рдерд╛, рд▓реЗрдХрд┐рди рдЙрджрд╛рд╣рд░рдг рдХреЗ рддреМрд░ рдкрд░ no-unused-variables рд╣реЛрдиреЗ рдкрд░, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЯреАрдПрд╕рд╕реА рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХрд┐рдП рдЧрдП рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдЯреАрдПрд╕рдПрд▓рд┐рдВрдЯ рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ _compiler error_ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ _linter error_ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ, рд╡реЗ рджреЛрдиреЛрдВ рдмреЗрд╣рддрд░ рдХреЛрдб рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИрдВред рдЕрдм рд╡реЗрдмрдкреИрдХ рдпрд╛ рдкрд╛рд░реНрд╕рд▓ рдЬреИрд╕реЗ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛ рдЖрдкрдХреЛ рдЯреАрдПрд╕рд╕реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рднреА рдХреЛрдб рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореБрджреНрджреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?

рдореБрдЭреЗ рдЕрднреА рднреА рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рд░реЛрдбрдореИрдк рдкрд░ рд╣реИред рдЖрдкрдХреЛ TSC . рд╕реЗ noImplicitAny рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

я╕П TSLint рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ! я╕П

TSLint рдЕрдм #4534 рдкреНрд░рддрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред ESLint рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЛ рд▓рд┐рдВрдЯ рдХрд░рдиреЗ рдХреЗ рдирдП, рдЪрдордХрджрд╛рд░ рддрд░реАрдХреЗ рдХреЗ рд▓рд┐рдП typescript-eslint.io рджреЗрдЦреЗрдВред рдореИрдВ

рдЖрдк рд╕рднреА рдХреЗ рд╕рд╛рде рдУрдкрди рд╕реЛрд░реНрд╕рд┐рдВрдЧ рдХрд░рдирд╛ рдПрдХ рдЦреБрд╢реА рдХреА рдмрд╛рдд рдереА!

рдмреАрдк рдмреВрдк! TSLint рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ _(#4534)_ рдФрд░ рдЖрдкрдХреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ-рдПрд╕реНрд▓рд┐рдиреНрдЯ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП! рдореИрдВ

рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЖрдЧреЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЪрд░реНрдЪрд╛рдУрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЙрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЖрдкрдХреЛ рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

SwintDC picture SwintDC  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ypresto picture ypresto  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

cretz picture cretz  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

denkomanceski picture denkomanceski  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Ne-Ne picture Ne-Ne  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ