У мову JavaScript прапанавана дадаць сінтаксіс з інфармацыяй аб тыпах

Кампаніі Microsoft, Igalia і Bloomberg выступілі з ініцыятывай уключэння ў спецыфікацыю JavaScript сінтаксісу для відавочнага вызначэння тыпаў, падобнага на сінтаксіс, які ўжываецца ў мове TypeScript. У цяперашні час прататып змен, прапанаваны для ўключэння ў стандарт ECMAScript, вынесены для папярэдніх абмеркаванняў (Stage 0). На бліжэйшым сакавіцкім пасяджэнні камітэта TC39 плануецца перайсці на першую стадыю разгляду прапановы з прыцягненнем экспертнай супольнасці з ECMA.

Наяўнасць відавочна зададзенай інфармацыі аб тыпах дазволіць пазбегнуць многіх памылак у працэсе распрацоўкі, дасць магчымасць задзейнічаць дадатковыя тэхнікі аптымізацыі, спросціць адладку і зробіць код больш чытэльным і простым для дапрацоўкі і падтрымкі іншымі распрацоўшчыкамі. Падтрымку тыпаў прапануецца рэалізаваць у выглядзе апцыянальнай магчымасці - JavaScript-рухавічкі і runtime не падтрымліваюць праверку тыпаў будуць ігнараваць анатацыі з інфармацыяй аб тыпах і апрацоўваць код як раней, успрымаючы дадзеныя аб тыпах як каментары. Але прылады для праверкі тыпаў змогуць на аснове даступнай інфармацыі выяўляць памылкі, злучаныя з некарэктным выкарыстаннем тыпаў.

Пры гэтым у адрозненне ад інфармацыі аб тыпах, якая задаецца пры дапамозе анатацый JSDoc, паказваных у форме каментароў, прамое ўказанне тыпаў непасрэдна ў канструкцыях вызначэння зменных зробіць код больш наглядным, зразумелым і простым для рэдагавання. Напрыклад, інтэграваныя асяроддзі распрацоўкі з падтрымкай TypeScript змогуць адразу падсвятляць памылкі ў тыпізаваным JavaScript-кодзе без дадатковых пераўтварэнняў. Акрамя таго, убудаваная падтрымка тыпаў дасць магчымасць выконваць праграмы, напісаныя на тыпізаваных дыялектах JavaScript, такіх як TypeScript і Flow, без транспіляцыі з адной мовы ў іншую.

У мову JavaScript прапанавана дадаць сінтаксіс з інфармацыяй аб тыпах

З тыпаў прапануецца дадаць "string", "number" і "boolean", якія можна будзе выкарыстоўваць пры вызначэнні зменных, параметраў функцый, элементаў аб'ектаў, палёў класаў, тыпізаваных масіваў ("number[]"). Прапануецца таксама забяспечыць падтрымку аб'яднаных тыпаў («string | number») і джэнерыкаў. let x: string; function add(a: number, b: number) { return a + b; } interface Person { name: string; age: number; } function foo (x: T) { return x; } function foo(x: string | number): string | number { if (typeof x === number) { return x + 1 } else { return x + «!» } }

Крыніца: opennet.ru

Дадаць каментар