Oni proponas aldoni sintakson kun tipinformoj al la JavaScript lingvo

Mikrosofto, Igalia, kaj Bloomberg prenis la iniciaton inkludi sintakson en la JavaScript-specifo por eksplicitaj tipdifinoj, simila al la sintakso uzita en la TypeScript-lingvo. Nuntempe, la prototipŝanĝoj proponitaj por inkludo en la ECMAScript-normo estas prezentitaj por preparaj diskutoj (Ŝtapo 0). En la venonta kunveno de la TC39-komitato en marto, oni planas transiri al la unua etapo de konsidero de la propono kun la implikiĝo de la fakkomunumo de ECMA.

Havi eksplicite specifitan tipinformojn permesos al vi eviti multajn erarojn dum la disvolva procezo, ebligos uzi pliajn optimumigajn teknikojn, simpligi sencimigon kaj igos la kodon pli legebla kaj pli facila por modifo kaj subteno de triaj programistoj. Tipsubteno estas proponita esti efektivigita kiel laŭvola trajto - JavaScript-motoroj kaj rultempoj kiuj ne subtenas tipkontroladon ignoros komentadojn kun tipinformoj kaj prilaboros la kodon kiel antaŭe, traktante tipdatenojn kiel komentojn. Sed tipkontrolaj iloj povos uzi la disponeblajn informojn por identigi erarojn asociitajn kun malĝusta uzo de tipoj.

Krome, kontraste al tipinformoj specifitaj per JSDoc-komentoj specifitaj en la formo de komentoj, rekta indiko de tipoj rekte en variadifinaj konstrukcioj faros la kodon pli vida, komprenebla kaj pli facile redaktebla. Ekzemple, IDEoj kun TypeScript-subteno povos tuj reliefigi erarojn en tajpita JavaScript-kodo sen pliaj konvertiĝoj. Krome, enkonstruita tipsubteno ebligos ruli programojn skribitajn en tajpitaj JavaScript-dialektoj, kiel TypeScript kaj Flow, sen transpiro de unu lingvo al alia.

Oni proponas aldoni sintakson kun tipinformoj al la JavaScript lingvo

Inter la tipoj, oni proponas aldoni "ŝnuron", "nombron" kaj "bulean", kiuj povas esti uzataj dum difinado de variabloj, funkciparametroj, objektoelementoj, klaskampoj, tajpitaj tabeloj ("nombro[]"). Estas ankaŭ proponite disponigi subtenon por kunfanditaj tipoj ("ŝnuro | nombro") kaj senmarkaj. lasu x: ŝnuro; function add(a: nombro, b: nombro) { return a + b; } interface Person { nomo: ĉeno; aĝo:nombro; } funkcio foo (x: T) { return x; } funkcio foo(x: ĉeno | nombro): ĉeno | nombro { if (tipo de x === nombro) { return x + 1 } else { return x + "!" }}

fonto: opennet.ru

Aldoni komenton