Typescript: рдкреНрд░рдХрд╛рд░ рдЪреЗрдХрд░ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░ рдЦреЛ рджреЗрддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 8 рдирд╡ре░ 2016  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: microsoft/TypeScript

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрд╕реНрдХрд░рдг: 2.0.8

рдХреЛрдб

// test.ts
interface Type {
  type: number;
}

interface TypeExt extends Type {
  arr: Type[];
}

const guard = (arg: Type): arg is TypeExt => arg.type === 1;
const otherFunc = (arg1: Type, arg2: TypeExt): void => {};

export function y(arg: Type): void {
  if (guard(arg)) {
    for (const ITEM/* error is here */ of arg.arr) {
      if (otherFunc(ITEM, arg)) {
      }
    }
  }
}

Cmd рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд: tsc --noImplicitAny test.ts

рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░:
рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдирд╣реАрдВ

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░:

test.ts(14,16): error TS7022: 'ITEM' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer.

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

рдпрд╣ рдПрдХ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореБрджреНрджрд╛ рд╣реИред рдЖрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдВ ITEM рд╣рдо рдХрд╛ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдкреНрд░рдХрд╛рд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд arg.arr ред рдмрджрд▓реЗ рдореЗрдВ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЙрди рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ arg рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ otherFunc рдХрд╛ рдХреЙрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ _could_ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реЛред рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ _is_ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рддрд╛ рд╣реИ, рд╣рдо рдХреЙрд▓ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рддрд░реНрдХ рдХреЗ рднрд╛рд╡реЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╣рдореЗрдВ ITEM рдХрд╛ рдкреНрд░рдХрд╛рд░ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рдПрдХ рдЧреЛрд▓рд╛рдХрд╛рд░рддрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд╣рд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдХ рдирд┐рд╣рд┐рдд any рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдЖрддреЗ рд╣реИрдВред

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

рдЗрд╕ рдмреАрдЪ, рдЖрдк рдХреЗрд╡рд▓ otherFunc рдХреЙрд▓ рдореЗрдВ arg рдХреЛрд╖реНрдардХ рдЬреЛрдбрд╝рдХрд░ рд╡реГрддреНрддрд╛рдХрд╛рд░рддрд╛ рдХреЛ рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдХреЙрд▓ рдХреЛ otherFunc(ITEM, (arg)) рдмрджрд▓реЗрдВред рдпрд╣ рдХрдВрдЯреНрд░реЛрд▓ рдлрд╝реНрд▓реЛ рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдХреЗ рдХрд╛рд░рдг рдХреЙрд▓ рдХреЛ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рдХрд╛рд░ рд╡рд┐рдзреЗрдп рдЖрд╣реНрд╡рд╛рди рдирд╣реАрдВ рдорд╛рдирддрд╛ рд╣реИред

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

рдпрд╣ рдПрдХ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореБрджреНрджрд╛ рд╣реИред рдЖрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдВ ITEM рд╣рдо рдХрд╛ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдкреНрд░рдХрд╛рд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд arg.arr ред рдмрджрд▓реЗ рдореЗрдВ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЙрди рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ arg рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ otherFunc рдХрд╛ рдХреЙрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ _could_ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реЛред рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ _is_ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рддрд╛ рд╣реИ, рд╣рдо рдХреЙрд▓ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рддрд░реНрдХ рдХреЗ рднрд╛рд╡реЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╣рдореЗрдВ ITEM рдХрд╛ рдкреНрд░рдХрд╛рд░ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рдПрдХ рдЧреЛрд▓рд╛рдХрд╛рд░рддрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд╣рд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдХ рдирд┐рд╣рд┐рдд any рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдЖрддреЗ рд╣реИрдВред

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

рдЗрд╕ рдмреАрдЪ, рдЖрдк рдХреЗрд╡рд▓ otherFunc рдХреЙрд▓ рдореЗрдВ arg рдХреЛрд╖реНрдардХ рдЬреЛрдбрд╝рдХрд░ рд╡реГрддреНрддрд╛рдХрд╛рд░рддрд╛ рдХреЛ рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдХреЙрд▓ рдХреЛ otherFunc(ITEM, (arg)) рдмрджрд▓реЗрдВред рдпрд╣ рдХрдВрдЯреНрд░реЛрд▓ рдлрд╝реНрд▓реЛ рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдХреЗ рдХрд╛рд░рдг рдХреЙрд▓ рдХреЛ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рдХрд╛рд░ рд╡рд┐рдзреЗрдп рдЖрд╣реНрд╡рд╛рди рдирд╣реАрдВ рдорд╛рдирддрд╛ рд╣реИред

@ рд╣реЗрдЬреЗрд▓реНрд╕рдмрд░реНрдЧ
рд▓рдШреБрдХреЛрд╖реНрдардХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдореИрдВ рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдкреАрдЖрд░ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ, рд╣реИ рдирд╛?

@ рдЖрд░реНрдпрд╕рдХреЛрд╡ рдЕрдм рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рдареАрдХ рдХрд░реЗрдВ!

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

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

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

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

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

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

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