Typescript: рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд ES рд░реЗрд╕реНрдЯ/рд╕реНрдкреНрд░реЗрдб рдкреНрд░реЙрдкрд░реНрдЯреАрдЬрд╝ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 21 рдлрд╝рд░ре░ 2015  ┬╖  96рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: microsoft/TypeScript

es7 рдкреНрд░рд╕реНрддрд╛рд╡ : https://github.com/sebmarkbage/ecmascript-rest-spread

рдЧреБрдг рдлреИрд▓рд╛рдУ

рдЯрд╛рдЗрдкрд┐рдВрдЧ

рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рд▓рдХреНрд╖реНрдп рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреА рдирдХрд▓ рдХрд░рдиреЗ рдФрд░ рдХреБрдЫ рдкреНрд░реЙрдкреНрд╕ рдХреЛ рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╕рдВрдкрддреНрддрд┐ рдШреЛрд╖рдгрд╛ рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░рдирд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ:

var obj = { x: 1, y: 2};
var obj1 = {...obj, z: 3, y: 4}; // not an error

рдореЗрд░реЗ рдкрд╛рд╕ рдореЗрд░реЗ рдЫреЛрдЯреЗ jsx-typescript рдХрд╛рдВрдЯреЗ рдореЗрдВ рдПрдХ рд╕рдорд╛рди рд╕реБрд╡рд┐рдзрд╛ ( JSXSpreadAttribute ) рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рдмреЗрд╡рдХреВрдл рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╣реИ : рдЬрдм рдореИрдВ рдлреИрд▓рддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореИрдВ рдЧреБрдг рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ _spread рдСрдмреНрдЬреЗрдХреНрдЯ_ рдХреЗ рдЧреБрдгреЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рддрд╛ рд╣реВрдВ , рдФрд░ рдЕрдЧрд░ рдореИрдВ рдПрдХ рд╕рдорд╛рди рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдШреЛрд╖рдгрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдЙрди рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВред

рдЙрддреНрд╕рд░реНрдЬрдХ

jstransform рдЙрдкрдпреЛрдЧ Object.assign , рдХреЛрд▓рд╛рд╣рд▓ рдПрдХ рд╢рд┐рдо рдкрд░рд┐рдЪрдп:

var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

рд╣рдо рдпрд╛ рддреЛ assign рдлрд╝рдВрдХреНрд╢рди рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ ObjectConstructor рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдПрдХ рд╕рдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдПрдХ рдЕрд▓рдЧ рдирд╛рдо рдХреЗ рд╕рд╛рде)ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╖реНрдЯрддрдо рд╕рдорд╛рдзрд╛рди es6 рд▓рдХреНрд╖реНрдп (рдпрд╛ рдпрджрд┐ Object.assign рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕рд╣рд╛рдпрдХ рдХреЛ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ es5 , es3 рд▓рд┐рдП рдПрдХ рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рди рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛

var obj = { x: 1, y: 2};
var obj1 = {...obj, z: 3};

/// ES6 emit
var obj = {x: 1, y: 2};
var obj1= Object.assign({}, obj, { z: 3 });

//ES3 emit
var __assign = function (target) { 
    for (var i = 1; i < arguments.length; i++) { 
        var source = arguments[i]; 
        for (var key in source) { 
            if (Object.prototype.hasOwnProperty.call(source, key)) { 
                target[key] = source[key];
            } 
        } 
    } 
    return target; 
};

var obj = {x: 1, y: 2};
var obj1= __assign({}, obj, { z: 3 });

рдмрд╛рдХреА рдЧреБрдг

рдЯрд╛рдЗрдкрд┐рдВрдЧ

рд╕рд╛рдзрд╛рд░рдг рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдирдпрд╛ рдкреНрд░рдХрд╛рд░ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХрд╛ рдПрдХ рдЙрдкрдкреНрд░рдХрд╛рд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдРрд╕реЗ рдЧреБрдг рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдмрд╛рдХреА рдЧреБрдгреЛрдВ рд╕реЗ рдкрд╣рд▓реЗ рдХреИрдкреНрдЪрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ:

var obj = {x:1, y: 1, z: 1};
var {z, ...obj1} = obj;
obj1// {x: number; y:number};

рдпрджрд┐ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдореЗрдВ рдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ рдШреЛрд╖рдгрд╛ рд╣реИ, рддреЛ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рдПрдХ рд╕рдорд╛рди рд╕реВрдЪрдХрд╛рдВрдХ рдШреЛрд╖рдгрд╛ рднреА рд╣реИ:

var obj: { [string: string]: string };
var {[excludedId], ...obj1} = obj;
obj1// { [string: string]: string };

рдирдИ/рдХреЙрд▓ рдШреЛрд╖рдгрд╛рдПрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреИрдкреНрдЪрд░ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИрдВ:

var obj: { (): void; property: string};
var { ...obj1} = obj;
obj1// { property: string };

рдЙрддреНрд╕рд░реНрдЬрдХ

рдПрдХ рд╕рд╣рд╛рдпрдХ рд╕рдорд╛рд░реЛрд╣ рдХреЗ рдмрд┐рдирд╛ _rest properties_ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдПрдХ рдмреЗрдмреЗрд▓ рд╕реЗ рд╣реИ:

var obj = {x:1, y: 1, z: 1};
var {z, ...obj1} = obj;
var __objectWithoutProperties = function(obj, keys) {
    var target = {};
    for (var i in obj) {
        if (keys.indexOf(i) >= 0) continue;
        if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;
        target[i] = obj[i];
    }
    return target;
};

var obj = {x:1, y: 1, z: 1};
var z = obj.z;
var obj1 = __objectWithoutProperties(obj, ["z"]);

_рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдХреБрдЫ рдЫреЛрдЯреЗ рдЯрд╛рдЗрдкрд┐рдВрдЧ/рдЙрддреНрд╕рд░реНрдЬрдХ рдЙрджрд╛рд╣рд░рдг рдЬреЛрдбрд╝реЗ рдЧрдП_

Committed ES Next Fixed Suggestion

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

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдЕрдВрддрддрдГ рдЗрд╕реЗ рдХреИрд╕реЗ рд╢рд┐рдк рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓рд┐рдЯрд░рд▓ рдФрд░ рдбрд┐рд╕реНрдЯреНрд░рдХреНрдЯрд┐рдВрдЧ рдореЗрдВ рд░реЗрд╕реНрдЯ/рд╕реНрдкреНрд░реЗрдб рдкрд░ рдХрд╛рдо рд╢реБрд░реВ рдХрд┐рдпрд╛ред рдЕрднреА рдпреЛрдЬрдирд╛ рд╣рдорд╛рд░реЗ __assign рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрддреНрд╕рд░реНрдЬрди рдХреЗ рд▓рд┐рдП рдХрд░рдиреЗ рдХреА рд╣реИред

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

рд╣рдореЗрдВ рд╢рд╛рдпрдж рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХрд┐ рдЗрд╕реЗ рдбрд╛рдЙрдирд▓реЗрд╡рд▓ рдореЗрдВ рдХреИрд╕реЗ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдпрджрд┐ рдпрд╣ рджрд╛рдпрд░реЗ рдореЗрдВ рд╣реИ)ред

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

рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ ES7 рдореЗрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЦреЛрдЬ рдХреА рд╣реИред рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛, рдпрд╣ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИ!

рдЗрд╕реЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рджреЗрдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛!

рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ? рдЗрд╕реЗ 1.6 рдореЗрдВ рджреЗрдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрдЧрд╛: рдореБрд╕реНрдХрд╛рди:

рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП @prabirshrestha , рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ master рдкрд░ рдкреНрд░реЙрдкрд░реНрдЯреА рд╕реНрдкреНрд░реЗрдб рдСрдкрд░реЗрдЯрд░ рд╣реИред

@DanielRosenwasser рдХреНрдпрд╛ рдЖрдк рд╡рд┐рд╕реНрддреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдорд╛рд╕реНрдЯрд░ рдкрд░ --jsx рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рдХреНрдпрд╛ рдЗрд╕рдореЗрдВ рдмрд╛рдХреА рд╕рдВрдкрддреНрддрд┐рдпрд╛рдВ рд╢рд╛рдорд┐рд▓ рд╕рдВрдкрддреНрддрд┐рдпрд╛рдВ рдлреИрд▓рддреА рд╣реИрдВ ?

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ @mnpenner рдФрд░ @prabirshrestha , рд╣рд╛рдБ, рдореЗрд░рд╛ рдорддрд▓рдм master ред @RyanCavanaugh рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ

JSX рд╕реНрдкреНрд░реЗрдб _attributes_ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ <TagName {...spreadedExpr} /> ред рд╕рдорд╛рди рдЯреЛрдХрди рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдФрд░ рдореЛрдЯреЗ рддреМрд░ рдкрд░ рд╕рдордХрдХреНрд╖ рд╢рдмреНрджрд╛рд░реНрде рд╣реЛрдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ ES6 рд╕реНрдкреНрд░реЗрдб рдСрдкрд░реЗрдЯрд░ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИред

рдореБрдЭреЗ Redux рдФрд░ React рджреЛрдиреЛрдВ рдореЗрдВ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рдЗрд╕рд╕реЗ рд░рд╛рдЬреНрдп рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рджреЗрдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ред

рд░реЗрд╕реНрдЯ/рд╕реНрдкреНрд░реЗрдб рдЕрдм рд╕реНрдЯреЗрдЬ 2 рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХреГрдд рд╣реИ https://github.com/tc39/tc39-notes/blob/master/es7/2015-07/july-30.md

рд╣рдо рдЗрд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЪрд░рдг 3 рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдпрд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рд░реЗрдбрдХреНрд╕ рдореЗрдВ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИ, рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рд▓рд╛рдЧреВ рдХрд░реЗрдВ, рдХреГрдкрдпрд╛ :-)

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

https://gist.github.com/tomduncalf/fbae862b123445c117cb

рдХреНрдпрд╛ рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдк рдПрдХ рдкреИрдЪ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВрдЧреЗ? (рдПрдХ рдмрд╛рд░ рдЪрд░рдг 3 рдкрд░ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рдмрд╛рдж рд╡рд┐рд▓рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)ред рдФрд░ рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдХреЛрдИ рд╕рдВрдХреЗрдд рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрди рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рдП?

рдпрд╣ рдЖрдЦрд┐рд░реА ES7+ рд╕реБрд╡рд┐рдзрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореЗрд░реА рдЯреАрдо рднрд╛рд░реА рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХ рд░рд╣реА рд╣реИ; рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЬрд▓реНрджреА рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗред

рд╣рдо рдпрд╣рд╛рдВ рдПрдХ рдкреАрдЖрд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдПрдХ рдиреЛрдЯ рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╡рд╛рдпрд░ рдХрд░рдирд╛ рдХреЛрдИ рдЖрд╕рд╛рди рдХрд╛рдо рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рд╕рдордЭрдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рддреЛ рдореИрдВ рдЗрд╕реЗ рд╡реГрджреНрдзрд┐рд╢реАрд▓ рд░рдЦреВрдВрдЧрд╛, рдФрд░ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╕реЗ рд╢реБрд░реВ рдХрд░реВрдВрдЧрд╛, рдлрд┐рд░ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ рдФрд░ рдлрд┐рд░ рдЬрд╛рдВрдЪ рдЯрд╛рдЗрдк рдХрд░реЗрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдХреЛрдИ рдкреНрд░рд╢реНрди рд╣реИрдВ рддреЛ @sandersn рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

Redux рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╕ рдПрдХ рдиреЛрдЯред рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдЕрдВрдХрди рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ updeep рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдХрд░ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдареАрдХ рд╣реЛ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рдЯрд╛рдЗрдкрд┐рдВрдЧ рдмрдирд╛рдИ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреБрд╕реНрддрдХрд╛рд▓рдп рднреА рд╣реИ рдЬреЛ updeep рдЖрдзрд╛рд░рд┐рдд рд╕реНрдЯреЛрд░ рдФрд░ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдЗрд╕рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ рддреЛ рдмрд╕ рдореБрдЭрд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВред

рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, :+1: TS рдореЗрдВ рд╕реНрдкреНрд░реЗрдб рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдПред :рдореБрд╕реНрдХреБрд░рд╛рдУ:

@xogeny рдореБрдЭреЗ рдЙрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рджреЗрдЦрдиреЗ рдореЗрдВ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛрдЧреАред рдзрдиреНрдпрд╡рд╛рдж

@ cur3n4 рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рднрдВрдбрд╛рд░ рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВ рдЗрди рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рд░рд╣рд╛ рд╣реВрдВред рдпрд╣ рдХрд╛рдлреА рд╣рдж рддрдХ рдмрджрд▓рддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдм рдЕрднреА рднреА рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ)ред рдореИрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЬрд┐рд╕рдиреЗ рд╢реБрд░реБрдЖрдд рдореЗрдВ updeep рд▓рд╛рдн рдЙрдард╛рдпрд╛ рдФрд░ рд╡рд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЕрднреА рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╣реИ ред рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдмрд╛рдзрд╛рдУрдВ рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд▓рдЧрд╛ред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЬрд╛рд╡рд╛ рдХреЗ super рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреА рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдерд╛ , updeep (рдФрд░ рдХрдИ рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп, рдЬреИрд╕реЗ lodash рдпрд╛ ramda ) рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рдпрд╛ред

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЧрд▓рдд рдордд рд╕рдордЭреЛ, рдореБрдЭреЗ рдЕрднреА рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕реНрдкреНрд░реЗрдб рдСрдкрд░реЗрдЯрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЛ рдЙрд╕ рднрд╛рд╖рд╛ рдореЗрдВ рдЪреАрдЬреЛрдВ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рд╕реЗ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдФрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдЬреЛ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП (_рдпрд╛рдиреА,_ рдЖрдкрдХреЛ рдмрд╛рд╣рд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдкрд░ рд╕рд╣реА рдкреНрд░рдХрд╛рд░ рдХреА рдмрд╛рдзрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЗрдЬрд╛рдЬрдд рджреЗрддрд╛ рд╣реИ)ред рдлрд┐рд▓рд╣рд╛рд▓, рдореИрдВ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХрд╛ рддреНрдпрд╛рдЧ рдХрд░рддрд╛ рд╣реВрдВ (рдЬрдмрдХрд┐ updeep рджреГрд╖реНрдЯрд┐рдХреЛрдг рдиреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛ рддреНрдпрд╛рдЧ рдХрд┐рдпрд╛)ред

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

:+1:

рдпрд╣ рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗред

+1

рд╕реБрд╡рд┐рдзрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдХреГрдкрдпрд╛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ

+1

Object.рдЕрд╕рд╛рдЗрди + JSX рд╕рдорд░реНрдерди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ +1 рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИ

+1 рдпрд╣ рдкреНрд░реЙрдкреНрд╕ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ( var { checked, ...other } = this.props; ред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджреЗрдЦреЗрдВ

рдпрд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

рдЖрдЗрдП рдИрдорд╛рдирджрд╛рд░ рд░рд╣реЗрдВ, рдпрд╣ рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рд╣реИ, рди рдХрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдкреНрд░рд╕реНрддрд╛рд╡ TC39 рдХреЗ рд╕рд╛рде рд╕реНрдЯреЗрдЬ 2 рдкрд░ рд╣реИред рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреАрдо рдиреЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рд╡реЗ рдЙрди рдЪреАрдЬреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реБрдИ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рд╡реЗ рд╕реНрдЯреЗрдЬ 3 рдирд╣реАрдВ рд╣реИрдВред "+1" рдХрд╛ рд╕реНрдерд╛рди TC39 рдХреЗ рд╕рд╛рде рд╣реИред

@kitsonk - рдЬрдм рдЖрдк рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛/рдЖрджрд┐ рдЬреИрд╕реЗ рдврд╛рдВрдЪреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдЪреАрдЬреЛрдВ рдХреЛ

рдЦреИрд░, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рд╡реНрдпрд╛рдкрдХ рд╡рд┐рд╖рдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдХреЛрдИ рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдХреНрд░реЗрддрд╛ рдРрд╕реА рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдЬреЛ рдЪрд░рдг 3 рдореЗрдВ рдирд╣реАрдВ рд╣реИ (рдЬрдм рддрдХ рдХрд┐ рд╡реЗ рдЗрд╕реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддреЗ)ред TC39 рд╡реЗрдм рдХреЗ рдЕрдкрдиреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕реНрддрд░ рдХрд╛ рд╕рдВрдЧрдарди рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдиреЗ рдкрд╣рд▓реЗ рдмрдВрджреВрдХ рдХреВрджрдХрд░ (рдореЙрдбреНрдпреВрд▓, рдФрд░ рдЙрд╕ рдЕрд░рд╛рдЬрдХрддрд╛ рдХреЛ рджреЗрдЦреЗрдВ рдЬреЛ рддрдм рд╕реЗ рд╣реБрдИ рд╣реИ) рдХреЛ рдХрд╛рдЯ рд▓рд┐рдпрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рдмрд╛рдд рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╡реЗ рдХреНрдпрд╛ рдФрд░ рдХрдм рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рд╣реИрдВ, рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдФрд░ рд╕рдВрд░рдЪрдирд╛ рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдХреНрдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдорд╛рдирдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ "рдХреНрдпреЛрдВрдХрд┐ рдПрдХреНрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдиреЗ рдЕрдкрдиреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ" рдПрдХ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛/рдЖрджрд┐ рдЬреИрд╕реЗ рдврд╛рдВрдЪреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдЪреАрдЬреЛрдВ рдХреЛ рдЕрдкрдиреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдмреБрд▓рд╛рддреЗ рд╣реИрдВ

рдЬрд┐рд╕реЗ рд╡реЗ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЖрдкрдХреЛ рдирд┐рд░реНрджреЗрд╢ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдмреИрдмреЗрд▓ 6 рдХреЛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реБрдкреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреИрд╕реЗ рдХреВрджреЗрдВред рдореИрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╡рд╛рдХреНрдп-рд╡рд┐рдиреНрдпрд╛рд╕ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдврд╛рдВрдЪреЗ рдХреЛ рджреЛрд╖ рджреВрдВрдЧрд╛ рдЬреЛ рдХреЗрд╡рд▓ рдорд╕реМрджрд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдкрд░ рд╣реИрдВред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рд╣рдо рдбреЛрдЬреЛ рдореЗрдВ, Object.observe рдЬрд▓ рдЧрдП рдФрд░ рдореИрдВ рдбреЛрдЬреЛ рдореЗрдВ рд╕реНрдЯреЗрдЬ 3 рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдорд┐рддрднрд╛рд╖реА рд╣реВрдВред

рд╡рд┐рд╢реЗрд╖ рдкрде рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕рд░реНрдЬрди рдкрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрдорд╛рди рд╣реИрдВред рдореИрдВрдиреЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдбреНрд░рд╛рдлреНрдЯ рд╕реНрдкреЗрдХ рдХреЛ рджреЗрдЦрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рддреАрдХ рдХрд╣рд╛рдВ рдЬрд╛рддреЗ рд╣реИрдВ? рдЧреИрд░-рдЧрдгрдирд╛ рдпреЛрдЧреНрдп рдЧреБрдг рдХрд╣рд╛рдБ рдЬрд╛рддреЗ рд╣реИрдВ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рд╣реА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╡реЗ рдИрдерд░ рдореЗрдВ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рднрд╛рдЬрди рдФрд░ рд╡рд┐рд▓рдп рд╣реЛрдВрдЧреЗ рдЬрд┐рдиреНрд╣реЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреАрдо рдХрд╣ рд░рд╣реА рд╣реИ "рдареАрдХ рд╣реИ, рдЪрд▓реЛ рдмрдВрдж рдХрд░реЛ рдЗрд╕ рдкрд░ рдЬрдм рддрдХ рдЯреАрд╕реА39 рдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдкрд░ рдЯрд╛рдпрд░реЛрдВ рдХреЛ рд▓рд╛рдд рдирд╣реАрдВ рдорд╛рд░реА рд╣реИ"ред

рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ TS рдЖрдЬ рдХрд╛рдлреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЪрд┐рддреНрд░рд┐рдд рд╣реИред рдПрдХ рд╕рдордп рдерд╛ (рд▓рдЧрднрдЧ 1.4 ~ 1.5 рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ) рдЬрд╣рд╛рдВ рдореИрдВ рдХреБрдЫ рдИрдПрд╕2015 рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рдХрдореА рд╕реЗ рдирд┐рд░рд╛рд╢ рдерд╛, рд▓реЗрдХрд┐рди рдЖрдЬ рддрдХ рдЯреАрдПрд╕ рдиреЗ рдорд╛рдирдХ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрдХрдбрд╝ рд▓рд┐рдпрд╛ рд╣реИред

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

рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рд╣рдореЗрдВ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ TS рдЯреАрдо рд╕рдВрдЧрддрддрд╛ рдХреЛ рдмрд╛рдмреЗрд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рд▓реЗрддреА рд╣реИред рд╡реЗ рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рдмреАрдЪ рдЖрдкрдХреЗ рдХреЛрдб рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рдмрджрд▓рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдпрд╛ рдмрд╕ рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд╣рдЯрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдмреИрдмреЗрд▓ рдХрд░рддрд╛ рд╣реИред рдХреБрдЫ (рдЙрджреНрдпрдо?) рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рдореИрдВ рдпрд╣ рднреА рд╕рдордЭ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдПрдордПрд╕ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдирд┐рд╡реЗрд╢ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдЬреЛ рдЧрд┐рд░рд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, Object.observe рдлрд┐рдпрд╛рд╕реНрдХреЛ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддрд╛ рд╣реИред рджрд░рдЕрд╕рд▓, рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рд╡реЗ рдЗрд╕ рдкрд░ рдПрдХ рдкреАрдЖрд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рдкрд▓рдХ:ред

рдЕрддреАрдд рдореЗрдВ рдХреБрдЫ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рдХрдВрдкрд╛рдЗрд▓рд░ рд╕реНрд╡рд┐рдЪ (рдЬреИрд╕реЗ async) рдХреЗ рдкреАрдЫреЗ рдЬрд▓реНрджреА рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдХрд╛ рдорддрд▓рдм рдерд╛ рдХрд┐ рдЖрдкрдХреЛ рдСрдкреНрдЯ рдЗрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдлреАрдЪрд░ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рднрд╡рд┐рд╖реНрдп рдХреЗ рд░рд┐рд▓реАрдЬ рдореЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рдпрд╣рд╛рдБ рдмрд╕ рдПрдХ рддреНрд╡рд░рд┐рдд рдиреЛрдЯред рд╣рдо рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдкрд┐рдЫрдбрд╝реЗ рд╕рдВрдЧрддрддрд╛ рдЪрд┐рдВрддрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рдЪрд░рдг 0-1 рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдИрдПрд╕ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЕрдкрдирд╛рдиреЗ рдореЗрдВ рдзреАрдореЗ рд░рд╣реЗ рд╣реИрдВред рд╣рдо TC39 рдмреИрдардХреЛрдВ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд╛ рдмрд╛рд░реАрдХреА рд╕реЗ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдмреИрдардХреЛрдВ рдореЗрдВ рдпрд╛ рдмреИрдардХреЛрдВ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рд╕реНрддрд╛рд╡ рддреИрдпрд╛рд░рд┐рдпреЛрдВ рдореЗрдВ рд╕реАрдзреЗ рднрд╛рдЧ рд▓реЗрддреЗ рд╣реИрдВ; рдФрд░ рдЬрдм рд╣рдо рдПрдХ рдлреАрдЪрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдЬрд╛рдирдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдХрд┐ рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ рдЬреЛ рдЙрди рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рд▓реЗрддреЗ рд╣реИрдВред
рдпрджрд┐ рдЖрдк TC39 рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рддреЛ рдЪрд░рдг 1 рдкрд░ рдПрдХ рд╕реБрд╡рд┐рдзрд╛ "рдкреНрд░рдореБрдЦ" рдкреЛрд╕реНрдЯ рд╕реНрд╡реАрдХреГрддрд┐ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░ рд╕рдХрддреА рд╣реИред рдХрдХреНрд╖рд╛рдУрдВ, рдореЙрдбреНрдпреВрд▓, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдФрд░ рд▓рдЧрднрдЧ рд╕рднреА рдЧреИрд░-рддреБрдЪреНрдЫ ES6 рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдорд╛рдорд▓рд╛ рдерд╛ред
рдореЗрд░реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЯреЛрдкреА рд▓рдЧрд╛рдирд╛, рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рддреЛрдбрд╝рдирд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛рдВрддреНрд░рд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╢рдмреНрджрд╛рд░реНрде рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдкрдХрдбрд╝рдирд╛ рдФрд░ рдареАрдХ рдХрд░рдирд╛ рдмреЗрд╣рдж рдХрдард┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ; рдЗрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЯреАрдореЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдмрдбрд╝реА рд▓рд╛рдЧрдд рд╣реЛ рд╕рдХрддреА рд╣реИ, рдФрд░/рдпрд╛ рдЯреВрд▓ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдЕрдкрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╡рд░реЛрдзрдХ рд╣реЛ рд╕рдХрддреА рд╣реИред рдФрд░ рдЬрдм рд╕рдВрднрд╡ рд╣реЛ рд╣рдо рдЗрд╕реЗ рдХрдо рд╕реЗ рдХрдо рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдордиреЗ рдЪрд░рдг 3 рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреАрддрд┐ рдЕрдкрдирд╛рдИ рд╣реИ, рдФрд░ рдЙрд╕рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдзреНрд╡рдЬ рдХреЗ рддрд╣рдд (рдЬреИрд╕реЗ рдбреЗрдХреЛрд░реЗрдЯрд░)ред
рдРрд╕рд╛ рдХрд╣рдиреЗ рдХреЗ рдмрд╛рдж, рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рд╕реНрдкреНрд░реЗрдб рдФрд░ рдмрд╛рдХреА рд╣рдорд╛рд░реЗ рд░реЛрдбрдореИрдк рдкрд░ рд╣реИрдВ , рдФрд░ рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд░рд┐рд▓реАрдЬ рдореЗрдВ рдЙрдирд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рддреГрддреАрдп рдкрдХреНрд╖ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрдкрд╛рдЗрд▓рд░ рдХреНрд╖рдорддрд╛ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЬреИрд╕рд╛ рдХрд┐ рдмреЗрдмреЗрд▓ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?

рдПрдХ рдФрд░ рд╡рд┐рдЪрд╛рд░: рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрд░реЛрддреЛрдВ (рдмреЗрдмреЗрд▓ рдХреЗ рд╕рд╛рде) рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

рдпрджрд┐ рд╣рдо Object.assign рдХреЙрд▓ рдореЗрдВ рдлреИрд▓реА рд╣реБрдИ рд╡рд╕реНрддреБ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрдмреЗрд▓ (рдпрд╛ рдЬреЛ рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдп) рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХрд╛рдлреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдмреИрдмреЗрд▓ рдореЗрдВ рд▓рд╛рдЧреВ рдЕрдиреНрдп рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднреА рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдпреЛрдЧреНрдп рд╣реЛрдЧрд╛ред

@kitsonk - рд╡реНрдпрд╛рдкрдХ рд╡рд┐рд╖рдп рдмрд┐рд▓реНрдХреБрд▓, рдЦрддрд░реЗ рдХреА рдЗрдЪреНрдЫрд╛

. рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдиреЗ рдкрд╣рд▓реЗ рдмрдВрджреВрдХ рдХреВрджрдХрд░ (рдореЙрдбреНрдпреВрд▓, рдФрд░ рдЙрд╕ рдЕрд░рд╛рдЬрдХрддрд╛ рдХреЛ рджреЗрдЦреЗрдВ рдЬреЛ рддрдм рд╕реЗ рд╣реБрдИ рд╣реИ) рдХреЛ рдХрд╛рдЯ рд▓рд┐рдпрд╛ рд╣реИред

рд╡реЗ рдЪрд▓реЗ рдЧрдП рдФрд░ рд╕рдореБрджрд╛рдп рд╕реЗ рдХреБрдЫ рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ .NET рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рддреЗ рд╣реБрдП рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд┐рдпрд╛, рдпрд╣ рдЙрдирдХреА рдЕрдкрдиреА рдЧрд▓рддреА рд╣реИред

рдХреБрдЫ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдФрд░ рд╕рдВрд░рдЪрдирд╛ рд░рдЦреЗрдВ рдХрд┐ рд╡реЗ рдХреНрдпрд╛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рд╣реИрдВ рдФрд░ рдХрдм

рд╡реЗ рд╕рдЬреНрдЬрд╛рдХрд╛рд░ (рдЪрд░рдг 1), рд╡рд░реНрдЧ рдЧреБрдг (рдЪрд░рдг 1), рдЖрджрд┐ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред

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

рддреБрдореНрд╣рд╛рд░реА рдордЬрд╝рд╛рдХ рдХреА рд░рд╛рдд? рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдврд╛рдВрдЪрд╛ рд╣реИ рдФрд░ рдЕрднреА рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рд░рд╣рдиреЗ рдХрд╛ рдЕрдиреБрдорд╛рди рд╣реИред рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧреЛрдж рд▓реЗрдиреЗ рдХреЛ рдЪреЛрдЯ рдкрд╣реБрдВрдЪрд╛рдПрдЧрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдмреИрдмреЗрд▓ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкрдХрдбрд╝ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдЪреБрдиреМрддрд┐рдпрд╛рдБ рд╣реИрдВ рдЬреИрд╕реЗ: рдореМрдЬреВрджрд╛ рдРрдк рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдП 2 рдХреЗ рд▓рд┐рдП рдмреЗрдмреЗрд▓ рд╕реЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдирд╛ рдПрдХ рджреБрдГрд╕реНрд╡рдкреНрди рд╣реИ!, рдбрд┐рдХреВрдкреНрдб рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреА рдХрдореА рдХрд╛рдо рдХрд░рдирд╛ w/рдиреЛрдб рдХреЛ рдмреЗрд╣рдж рдХрдард┐рди рдмрдирд╛ рджреЗрддрд╛ рд╣реИред

рддреБрдореНрд╣рд╛рд░реА рдордЬрд╝рд╛рдХ рдХреА рд░рд╛рдд? рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдврд╛рдВрдЪрд╛ рд╣реИ рдФрд░ рдЕрднреА рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рд░рд╣рдиреЗ рдХрд╛ рдЕрдиреБрдорд╛рди рд╣реИред рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧреЛрдж рд▓реЗрдиреЗ рдХреЛ рдЪреЛрдЯ рдкрд╣реБрдВрдЪрд╛рдПрдЧрд╛ред

рд░рд┐рдПрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдорди рдореЗрдВ рдмрд╣реБрдд рд╕рдореНрдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдордЬрд╛рдХ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдпрд╣ рд╢рд╣рд░ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдЦреЗрд▓ рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдмрдбрд╝реЗ рдкреНрд░рдЪрд╛рд░ рд╡рдХреНрд░ рдкрд░ рд╣реИред 6 рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рдпрд╣ рд░рд┐рдПрдХреНрдЯ + рдлреНрд▓рдХреНрд╕ рдерд╛, рдЕрдм рд░рд┐рдПрдХреНрдЯ + рд░реЗрдбрдХреНрд╕ рджрд┐рди рдХрд╛ рд╕реНрд╡рд╛рдж рд╣реИред рдПрдХ рд╕рд╛рд▓ рдкрд╣рд▓реЗ, рдХреЛрдгреАрдп рдФрд░ рдкреЙрд▓рд┐рдорд░ред рджреЛ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдпрд╣ рдмреИрдХрдмреЛрди рдФрд░ рдПрдореНрдмрд░ рдерд╛ред рдЫрд╣ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдпрд╣ Dojo, MooTools, jQuery, gwt, ExtJS, рдЖрджрд┐ рдерд╛ ...

рдпрд╣рд╛рдВ рдврд╛рдВрдЪрд╛ рдпреБрджреНрдз рд╢реБрд░реВ рди рдХрд░реЗрдВ: рд╡рд┐рд╕реНрдордпрд╛рджрд┐рдмреЛрдзрдХ:
{..., } рд╕рд┐рдВрдЯреИрдХреНрд╕ рдмрд╣реБрдд рд╕реБрдВрджрд░ рд╣реИ, рдЪрд╛рд╣реЗ рдХреЛрдИ рднреА рдврд╛рдВрдЪрд╛ рдХреНрдпреЛрдВ рди рд╣реЛ

рд╡реЗ рдЪрд▓реЗ рдЧрдП рдФрд░ рд╕рдореБрджрд╛рдп рд╕реЗ рдХреБрдЫ рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ .NET рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рддреЗ рд╣реБрдП рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд┐рдпрд╛, рдпрд╣ рдЙрдирдХреА рдЕрдкрдиреА рдЧрд▓рддреА рд╣реИред

@amcdnl рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛

+1 рдЗрд╕рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдиреЛрдб рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ, рдЬреЗрдПрд╕ рдЗрд╕реЗ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерди рдХрд░ рд░рд╣рд╛ рд╣реИ

рд▓реЗрдЯ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ = {...рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдСрдмреНрдЬреЗрдХреНрдЯ_рд╕реНрдкреНрд░реЗрдб}; // рд╣рд╛рдБ рдХреГрдкрдпрд╛ред

рдЗрд╕ рдкрд░ рдХреЛрдИ рд╣рд▓рдЪрд▓ рдирд╣реАрдВ рд╣реИ, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдЬрд▓реНрдж рд╣реА рдЪрд░рдг 3 рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ VSCode рдореЗрдВ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рд╕рд┐рдВрдЯреИрдХреНрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдорд╛рд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╕рд╛рд▓реНрд╕рд╛ рдЦреЗрд▓ рдореЗрдВ рдХреБрдЫ рднреА рдмрджрд▓рддрд╛ рд╣реИ?

рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ TS рдЕрд╕реНрдерд┐рд░ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЬрд▓реНрджреА рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛: рд╕реАрдорд┐рдд рд╕рдВрд╕рд╛рдзрди, рд╕рдВрднрд╛рд╡рд┐рдд рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд░рдХреНрд╖рд╛ рдХрд░рдирд╛, рдЖрджрд┐ред

рд▓реЗрдХрд┐рди рдЕрдм рдЬрдм рд╕рд╛рд▓реНрд╕рд╛ рд╡реАрдПрд╕ рдХреЛрдб рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЬреЗрдПрд╕ рдЗрдВрдЬрди рд╣реИ, рддреЛ рдирдП рдЬреЗрдПрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ (рдХрдо рд╕реЗ рдХрдо рд╕рд┐рд░реНрдл рд╕рд┐рдВрдЯреИрдХреНрд╕, рдкреВрд░реНрдг рдЯреАрдПрд╕ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдирд╣реАрдВ) рдХреЗ рд▓рд┐рдП рджрдмрд╛рд╡ рдмрдврд╝рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред рдЦрд╛рд╕рддреМрд░ рдкрд░ рдмрд╛рдмреЗрд▓ рдХреА рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдПред

рдХреНрдпрд╛ рд╕рд╛рд▓реНрд╕рд╛ рдЯреАрдПрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╡реНрдпрд╛рдкрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рддреЗрдЬреА рд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ?

+1

рдХреНрдпрд╛ рдпрд╣ 2.0 рдХреЗ рдмрдЬрд╛рдп 2.1 рдореЗрдВ рд╣реЛрдЧрд╛? :рд░реЛрдирд╛:
https://github.com/Microsoft/TypeScript/wiki/Roadmap#21

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ 2.0 рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рддрдирд╛ рдмрдбрд╝рд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдореИрдВ рдмрд╣реБрдд рд╣реИрд░рд╛рди рдирд╣реАрдВ рд╣реВрдВред

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

рддреЛ рдХреНрдпрд╛ рдпрд╣ рддрдп рд╣реИ?

... рдкреНрд░рд╕рд╛рд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдп
https://github.com/Microsoft/TypeScript/releases/tag/v1.8.10

рдЪреВрдВрдХрд┐ рдореБрдЭреЗ рдЕрднреА рднреА "рд╕рдВрдкрддреНрддрд┐ рдкреБрдирд░реНрдЧрдарди рдкреИрдЯрд░реНрди рдЕрдкреЗрдХреНрд╖рд┐рдд" рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ

рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВред рдпрд╣ рдлрд┐рдХреНрд╕ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ JSX рд╕реНрдкреНрд░реЗрдб рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╣реИ:

const props = { foo: "bar" };
return <SomeComponent {...props} />;

рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рдерд╛, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд░рд┐рдПрдХреНрдЯ v15 рдиреЗ рдПрдХ рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрдВрддрд░рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛, рдЬрд┐рд╕ рдкрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ JSX рдХрдВрдкрд╛рдЗрд▓рд░ рдирд┐рд░реНрднрд░ рдерд╛ред рдЙрдлрд╝

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

рддреЛ рдЪреВрдВрдХрд┐ {...props} рдЕрднреА рддрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЖрдк рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ?

рддреЛ рдЪреВрдВрдХрд┐ {...props} рдЕрднреА рддрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЖрдк рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ?

xtend рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: https://www.npmjs.com/package/xtend рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╣реИ: https://github.com/typed-typings/npm-xtend ( @blakeembrey рджреНрд╡рд╛рд░рд╛:rose :) рдзрдиреНрдпрд╡рд╛рдж рдЪреМрд░рд╛рд╣реЗ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП

рдпрд╛ рдХрд┐рд╕реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдкреНрд░рдпреЛрдЧ рдмрд┐рд▓реНрдХреБрд▓ рднреА рди рдХрд░реЗрдВ!

const newProps = Object.assign({} /*new object*/, props /* add all attributes of props */, {
   // add additional props
  bar: "baz"
});

рдпрд╣ рдереЛрдбрд╝рд╛ рд╡рд░реНрдмреЛрдЬрд╝ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ _is_ ES2015 рдХрд╛ рдореВрд▓ рдирд┐рд╡рд╛рд╕реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рд╣реИ, рддреЛ рдЖрдк рдареЛрд╕ рд╣реИрдВред

рдпрд╣ рдСрдкрд░реЗрдЯрд░ рдПрдХ рдореБрдЦреНрдп рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдордиреЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмрдЬрд╛рдп рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдмреЗрдмреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рд╣реИред

рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд░реВрдк рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрд▓ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред

рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрдпрд╛ рдРрд╕реА рдХреЛрдИ рдпреЛрдЬрдирд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХрд╕реНрдЯрдо рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ TSC рдореЗрдВ рдкреНрд▓рдЧ рдЗрди рдХрд░рдиреЗ рджреЗрддреА рд╣реИ рдЬреИрд╕реЗ рдЖрдк рдмреЗрдмреЗрд▓ рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╣реА рдПрдкреАрдЖрдИ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рднреА, рдпрд╣ рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░реЗрдЧрд╛ред

рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕реА рдХреЛрдИ рдпреЛрдЬрдирд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХрд╕реНрдЯрдо рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ TSC рдореЗрдВ рдкреНрд▓рдЧ рдЗрди рдХрд░рдиреЗ рджреЗрддреА рд╣реИ рдЬреИрд╕реЗ рдЖрдк рдмреЗрдмреЗрд▓ рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

@Niondir рд╣рд╛рдБред рдмрд╕ [Transforms] рдЯреИрдЧ рдЦреЛрдЬреЗрдВред рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рдЙрдЪрд┐рдд рдПрд╕рд┐рдВрдХ/рдкреНрд░рддреАрдХреНрд╖рд╛/рдЬреЗрдирд░реЗрдЯрд░ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓реЗрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: рдЧреБрд▓рд╛рдм:

рдереЛрдбрд╝реА рдЦреЛрдЬ рдХреЗ рдмрд╛рдж, рдЖрдк рдЗрд╕рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗ рд░рд╣реЗ рд╣реИрдВ? https://github.com/Microsoft/TypeScript/wiki/Using-the-Compiler-API

рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред рдореБрдЭреЗ рдЙрд╕ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдкреНрд░реЗрдб рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдЫ рднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ред рд╢рд╛рдпрдж рдпрд╣ рдХрдВрдкрд╛рдЗрд▓рд░ рдПрдкреАрдЖрдИ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреА рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реЛрдЧреА :)

@Niondir рдореЗрд░реЗ рдореВрд▓ рд╕рдВрджреЗрд╢ рдореЗрдВ рдмреЗрд╣рддрд░ рд╕рд╣рд╛рдпрддрд╛ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред рдореИрдВ https://github.com/Microsoft/TypeScript/issues/5595 < рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ ESNext рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп emit рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмреИрдмрд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╢рд╛рдорд┐рд▓ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдЖрдкрдХреЗ рдХреЛрдб рдХреА _semantic_ рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рд╕рдордЭ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдкреНрд░реЗрдб рдХрд╛рд░реНрдп рдХреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреАрдо рд╕реЗ рдЖрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдкреНрд▓рдЧрдЗрди рдЖрдзрд╛рд░рд┐рдд рдПрдорд┐рдЯрд░ рд╣реЛрдиреЗ рд╕реЗ рдпрд╣ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рдВ, рдЖрдк рдХрдВрдкрд╛рдЗрд▓рд░ рдПрдкреАрдЖрдИ (рдпрд╛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ fork рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реБрдЖрдд рдореЗрдВ рддрдм рддрдХ рдХрд░реЗрдВрдЧреЗ рдЬрдм рддрдХ рдХрд┐ рдПрдХ рдкреНрд▓рдЧрдЗрди рд╕рд┐рд╕реНрдЯрдо рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ + рд╕рд┐рдореЗрдВрдЯрд┐рдХ/рд╕реНрдХреИрдирд░ рд▓реЙрдЬрд┐рдХ рдХреЗ рд▓рд┐рдП)

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

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

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдЕрдВрддрддрдГ рдЗрд╕реЗ рдХреИрд╕реЗ рд╢рд┐рдк рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓рд┐рдЯрд░рд▓ рдФрд░ рдбрд┐рд╕реНрдЯреНрд░рдХреНрдЯрд┐рдВрдЧ рдореЗрдВ рд░реЗрд╕реНрдЯ/рд╕реНрдкреНрд░реЗрдб рдкрд░ рдХрд╛рдо рд╢реБрд░реВ рдХрд┐рдпрд╛ред рдЕрднреА рдпреЛрдЬрдирд╛ рд╣рдорд╛рд░реЗ __assign рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрддреНрд╕рд░реНрдЬрди рдХреЗ рд▓рд┐рдП рдХрд░рдиреЗ рдХреА рд╣реИред

рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдЦрдмрд░ рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ 3 рдорд╣реАрдиреЛрдВ рдореЗрдВ рд╕реБрдиреА рд╣реИ!

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЬреЗрдирд░рд┐рдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдПрдХ _lot_ рдХрд╛рдо рд╣реИред рдЖрдкрдХреЛ рдЗрд╕ рддрд░рд╣ рдХреЛрдб рдХрд╛ рдареАрдХ рд╕реЗ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

function addId<T>(t: T): {...T, id: number} {
    return { ...t, id: 1 };
}

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, addId рдПрдХ рдирдП рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреНрд░рдХрд╛рд░ рджреЗрддрд╛ рд╣реИ, рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╕реНрдкреНрд░реЗрдб рдСрдкрд░реЗрдЯрд░ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИред

рдХреБрдЫ рдЪрд░реНрдЪрд╛ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ 2.1 рддрдХ рджреЗрд░реА рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рджреЗрдЦреЗрдВред рд╣рдореЗрдВ рдЕрднреА 2.0 рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдореЗрд░реА рдЕрдЬреНрдЮрд╛рдирддрд╛ рдХреЛ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ ... рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ addId рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ T & { id: number } рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ? рдпрд╛ рдХреНрдпрд╛ рд╕рдВрдШ рдХреЗ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ рдЬреЛ рдЗрд╕реЗ рдЗрд╖реНрдЯрддрдо рд╕рдорд╛рдзрд╛рди рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрддреЗ рд╣реИрдВ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ T рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк T . рдХреЛ рдХреБрдЫ рднреА рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

addId<boolean>(true);
addId<number>(5);

рдмреЗрдмреЗрд▓ рдЪреБрдкрдЪрд╛рдк рдРрд╕реЗ рдмрдпрд╛рдиреЛрдВ рдХреА рдЙрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ let a = { ...true } рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП

рдпрд╣ T & { id: number } рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ T рдореЗрдВ id рд╕рдВрдкрддреНрддрд┐ рд╣реИ, рддреЛ рдпрд╣ рдУрд╡рд░рд░рд╛рдЗрдб рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рджреВрд╕рд░реА рдУрд░, рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрди, рдкрд░рд┐рдгрд╛рдореА рдкреНрд░рдХрд╛рд░ рдХрд╛ id T рдХреЗ id рдкреНрд░рдХрд╛рд░ рдФрд░ number рдХрд╛ рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрди рд╣реЛрдЧрд╛ред

рддреЛ @sandersn рдХреНрдпрд╛ рдХрд╣ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреЗ рдСрдкрд░реЗрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЬрдмрдХрд┐ рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣рд╛рдВ рдПрдХ рдмреЗрд╣рддрд░ рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╕рдорд╛рдзрд╛рди рд╕реЗ рд▓рд╛рднрд╛рдиреНрд╡рд┐рдд рд╣реЛрдВрдЧреЗ, Object.assign рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреМрд░рд╛рд╣реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдПрдХ рд╕реНрдЯреЙрдк рдЧреИрдк рдЙрдкрд╛рдп рдХреЗ рд░реВрдк рдореЗрдВ, рдмрд╛рдХреА рдСрдкрд░реЗрдЯрд░ рдареАрдХ рд╡рд╣реА рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдЬреЛ Object.assign рдХрд░рддрд╛ рд╣реИ?

рдпрд╣ рдЕрдиреБрдкрд▓рдмреНрдз рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рдХрдо рдХрд░реЗрдЧрд╛ рдФрд░ рдпрд╣ рдЕрд╡рд╛рдВрдЫрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рд▓рд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд▓реЛрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕рдХреЗ рдмрдЬрд╛рдп Object.assign рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреЗрд╣рдж рд╣реИрд░рд╛рди рдерд╛ рдХрд┐ рдпрд╣ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рдерд╛ред

рдЬреИрд╕реЗ рд╣реА рд╣рдо рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдореЗрд░рд┐рдпрд░ред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдмрдврд╝рд┐рдпрд╛ рдХрд╛рдо рдХрд░реЗрдЧрд╛!

рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА рднрд▓реЗ рд╣реА рдЗрд╕реЗ рдЯрд╛рдЗрдк рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ

@ 2426021684 рдпрд╣ рдЙрдЪрд┐рдд рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдирд┐рд╣рд┐рддрд╛рд░реНрдереЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдпрджрд┐ рдЗрд╕реЗ рдЯрд╛рдЗрдк рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╛рдиреА рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддреЛ any , рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдХреЛрдИ рднреА рдЙрдкрдпреЛрдЧ any рднрд╛рд╡ рдХреА рдкрддреНрддрд┐рдпреЛрдВ рддрдХ рдлреИрд▓ рдЬрд╛рдПрдЧрд╛ред

@aluanhaddad рдпрд╣ Object.assign рдЬреИрд╕рд╛ рд╣реА рд╣реЛрдЧрд╛ рдЬреЛ рдХрд┐ рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ (рдКрдкрд░ JabX рдкреЛрд╕реНрдЯ рджреЗрдЦреЗрдВ)

рдХреГрдкрдпрд╛ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ @JabX рдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдирд╛рдо рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЪрд░рдг 3 рд╣реИ, рдпрд╣ _рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдорд╛рдирдХ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдмрдирдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕рд░рд▓ рд╢рдмреНрджрд╛рд░реНрде рд╣реИред рдкреНрд░реЙрдкрд░реНрдЯреА рд╕реНрдкреНрд░реЗрдб рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рд╕рдорд░реНрдерди + Object.assign рдХреА рд╕рд░рд▓ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рд╕реНрдЯреЙрдкрдЧреИрдк рд╣реЛрдЧрд╛ рдЬрдм рд╣рдо "рд╕рд╣реА" рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред рдкрд░рдлреЗрдХреНрдЯ рдХреЛ рдЕрдЪреНрдЫрд╛рдИ рдХрд╛ рджреБрд╢реНрдорди рди рдмрдирдиреЗ рджреЗрдВред

рд░рд┐рдПрдХреНрдЯ 15.2 рдХреЗ рд╕рд╛рде рдмрд╛рдХреА рдЧреБрдг рдЕрддреНрдпрдВрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣рд╛рдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ https://facebook.github.io/react/warnings/unknown-prop.html

const divProps = Object.assign({}, props)
delete divProps.layout

рдмрд╣реБрдд рдмрджрд╕реВрд░рдд рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ рдПрдХ рдШрдЯрдХ рдкрд░ рд╕рд╣рд╛рд░рд╛ рдХреА рдорд╛рддреНрд░рд╛ рдЕрдзрд┐рдХ рд╣реИ

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдпрд╣рд╛рдВ рдЕрдм рдФрд░ рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ:

function steal(result: any, data: any): any {
    for (var key in data) {
        if (value.hasOwnProperty(key)) {
            result[key] = data[key];
        }
    }
    return result;
}

export class SameAs<a> {
    constructor(public result: a) { }
    public and<b>(value: b): SameAs<a & b> {
        return new SameAs<a & b>(steal(this.result, value));
    }
}
export function sameAs<a>(value: a): SameAs<a> {
    return new SameAs(steal({}, value));
}

// example of use:

const mixture = sameAs(one).and(anotherOne).and(yetAnotherOne).result; // <-- ta-da!

рдЗрд╕ рдкреЛрд╕реНрдЯ рдкрд░ рдзреНрдпрд╛рди рди рджреЗрдВ, рдмреЗрд╣рддрд░ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рджреЗрдЦреЗрдВ

рдпрд╣рд╛рдБ рдореИрдВ рдПрдХ рдЦрд░рд╛рдм (рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ) рдХреЛрдбрд░ рдХреЗ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЖрдпрд╛ рд╣реВрдБ:

declare interface ObjectConstructor {
  destruct<T extends Object>(data: T, props: any): T;
  destruct<T extends Object>(data: T, ...propNames: string[]): T;
}

function destruct<T extends Object>(data: T, ...removals: string[]) {
  const rest = <T>{};

  const keys = removals.length === 1 && typeof removals[0] === 'object' ?
    Object.getOwnPropertyNames(removals[0]) :
    <string[]>removals;

  Object
    .getOwnPropertyNames(data)
    .filter(x => keys.indexOf(x) < 0)
    .forEach(x => {
      (<any>rest)[x] = (<any>data)[x];
    });

  return rest;
}

Object.destruct = destruct;

// Usage example:

const srcObj = { A: 'a', B: 'b', C: 'c' };
// destruct using an object template
const onlyC = Object.destruct(srcObj, { A: null, B: null });
// destruct using property names
const onlyA = Object.destruct(srcObj, 'B', 'C');

рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реЗрдЖрдЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рд▓реЗрдЖрдЙрдЯ рдЯрд╛рдЗрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрджрд┐ рдЖрдк рдХреБрдЫ рднреА рд░рд┐рдлреИрдХреНрдЯрд░ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХрдо рд╕реЗ рдХрдо рдЯрд╛рдЗрдк рд╕рдВрдШрд░реНрд╖ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред

рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ (рдЗрд╕реЗ рднреА рдЕрдирджреЗрдЦрд╛ рдХрд░реЗрдВ, рдФрд░ рднреА рдмреЗрд╣рддрд░ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рджреЗрдЦреЗрдВ)

рдореИрдВрдиреЗ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ (рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдорд╛рд╣реМрд▓ рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдЦрд┐рд▓рд╡рд╛рдбрд╝ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж) рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рдЖрд╕рд╛рди рдЖрдпрд╛ред

function deconstruct<TResult, TData>(
  result: TResult,
  data: TData,
  onHit: (result: TResult, data: TData, x: string) => void,
  onMiss: (result: TResult, data: TData, x: string) => void,
  propNames: string[]
  ) {

  Object
    .getOwnPropertyNames(data)
    .forEach(x => {
      if (propNames.indexOf(x) < 0) {
        if (onMiss != null) {
          onMiss(result, data, x);
        }
      }
      else {
        if (onHit != null) {
          onHit(result, data, x);
        }
      }
    });

  return result;
}

// shallow clone data and create a destructuring array of objects
// i.e., const [ myProps, rest] = destruct(obj, 'propA', 'propB');
function destruct<T>(data: T, ...propNames: string[]) {
  return deconstruct(
    [ <T>{}, <T>{} ],
    data,
    (r, d, x) => (<any>r[0])[x] = (<any>d)[x],
    (r, d, x) => (<any>r[1])[x] = (<any>d)[x],
    propNames
  );
}

// shallow clone data and create a destructuring array of properties
// i.e., const [ propA, propB, rest] = destructProps(obj, 'propA', 'propB');
function destructProps(data: any, ...propNames: string[]) {
  return deconstruct(
    [ <any>{} ],
    data,
    (r, d, x) => r.splice(r.length - 1, 0, d[x]),
    (r, d, x) => r[r.length - 1][x] = d[x],
    propNames
  );
}

// shallow clone data and remove provided props
// i.e., const excluded = omit(obj, 'excludeA', 'excludeB');
function omit<T>(data: T, ...propNames: string[]) {
  return deconstruct(
    <T>{},
    data,
    null,
    (r, d, x) => (<any>r)[x] = (<any>d)[x],
    propNames
  );
}

рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрдирдХреЗ рд╕рд╛рде рд░рд┐рдПрдХреНрдЯ рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рдЬреНрдЮрд╛рдд рдкреНрд░реЙрдкреНрд╕ рдкрд░ рдордЬрдмреВрдд рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдХрд╛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЯреБрдХрдбрд╝рд╛ рд╣реИ рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рд╣реИ:

const [ props, restProps ] = destruct(omit(this.props, 'key', 'ref'), 'id', 'text');

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, props рдХреЛ this.props рддрд░рд╣ рд╣реА рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рд▓рд╛рдЗрди рдХреЗ рдиреАрдЪреЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рднреА рдкреНрд░реЙрдкреНрд╕ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ (рдЬреЛ рдЕрдм restProps рдореЗрдВ рд░рд╣рддреЗ рд╣реИрдВ)

рдЖрдИрдПрдордУ, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЧреИрд░-рдЯрд╛рдЗрдкрд╕реЗрдл рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рд╕реЗ рдмрд╣реБрдд рдХреБрдЫ рд╣рд╛рд╕рд┐рд▓ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред

рд╕рд╣рдордд рд╣реВрдВ, рдореИрдВ рдЕрднреА рдПрдХ рдЕрдзрд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдЗрд╕ рдкрд░ рдПрдХ рдФрд░ рд╡рд╛рд░:

рдореБрдЦреНрдп рд╡рд╕реНрддреБ рд╡рд┐рд╕реНрддрд╛рд░:

declare interface ObjectConstructor {
    rest<TData, TProps>(data: TData, propsCreator: (x: TData) => TProps, ...omits: string[]): { rest: TData, props: TProps };
}

function rest<TData, TProps>(data: TData, propsCreator: (x: TData) => TProps, ...omits: string[]) {
  const rest = <TData>{};
  const props = <TProps>propsCreator.apply(this, [ data ]);

  Object
    .getOwnPropertyNames(data)
    .filter(x => props.hasOwnProperty(x) === false && omits.indexOf(x) < 0)
    .forEach(x => {
      (<any>rest)[x] = (<any>data)[x];
    });

  return {
    rest,
    props,
  };
}

Object.rest = rest;

рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╕реНрддрд╛рд░:

declare module React {
  interface Component<P, S> {
    restProps<T>(propsCreator: (x: P) => T, ...omits: string[]): { rest: P, props: T };
  }
}

function restProps<P, S, T>(propsCreator: (x: P) => T, ...omits: string[]) {
  return Object.rest((<React.Component<P, S>>this).props, propsCreator, ...omits.concat('key', 'ref'));
}

React.Component.prototype.restProps = restProps;

рдХреБрдЫ рдирдореВрдирд╛ рдЙрдкрдпреЛрдЧ:

const src = { A: 'a', B: 'b', C: 'c' };
const { rest, props } = Object.rest(src, x => {
    const props = { A, C } = x;
  return { A, C };
});

рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдирдореВрдирд╛:

const { rest, props } = this.restProps(x => {
  const { header, footer } = x;
  return { header, footer };
});

рд╕рднреА рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХрдорд╛рддреНрд░ рд╣рд┐рд╕реНрд╕рд╛ рдЬреЛ рдореБрдЭреЗ рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рд╣реИ рдкреНрд░реЙрдкреНрд╕ рдХреНрд░рд┐рдПрдЯрд░ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рджреЛрд╣рд░рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╣реИрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдорд╛рди рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдирд╖реНрдЯ рдХреА рдЧрдИ рд╡рд╕реНрддреБ _a рдкрд░ рд░рд╣рддреА рд╣реИ рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ _dangerous_...
_рдиреЛрдЯ _: _a рдПрдХ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╣реИрдХ рднреА рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛ x ред

рдпрд╣рд╛рдБ рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ Fiddle рд╣реИред

рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдПрдХ рд╕рд░рдгреА рд▓реМрдЯрдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдирд╛рдо рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред

рд╕реНрдХреНрд░реИрдЪ рдХрд┐, рдпрд╣ рдкреНрд░реЙрдкреНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рд░реЛрдХреЗрдЧрд╛ред

рдЪреВрдВрдХрд┐ рдпрд╣рд╛рдВ рдЬреНрдпрд╛рджрд╛рддрд░ рд▓реЛрдЧ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдХреЗрд╡рд▓ *.tsx рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рддрдм рддрдХ рд▓рд╛рдЧреВ рдХреНрдпреЛрдВ рди рдХрд░реЗрдВ рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдЪрд░рдг 3 рддрдХ рди рдкрд╣реБрдВрдЪ рдЬрд╛рдП?

Redux reducers рдХреЛ *.tsx рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд╕рдУрдмреНрдЬреЛ рдЯрд╛рдЗрдкрдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рдЯрд╛рдЗрдк рдХреЗ рд░реВрдк рдореЗрдВ рдУрдмреАрдЬреЗ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

рдпрд╣ рди рдХреЗрд╡рд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП, рдмрд▓реНрдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд░реЗрдбрдХреНрд╕ рд░реЗрдбреНрдпреВрд╕рд░ рдореЗрдВ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░ рдЯреИрдЧ рдФрд░ рд▓рд╛рдкрддрд╛ рдореАрд▓ рдХрд╛ рдкрддреНрдерд░ рдереЛрдбрд╝рд╛ рдкреБрд░рд╛рдирд╛ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреНрд░рддрд┐рдмрджреНрдз рд╣реИ рдФрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 2.1 рдХреЗ рд▓рд┐рдП (#10727) рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЕрдм рдЗрд╕рдХреЗ рдореВрд▓реНрдп рдкрд░ рдмрд╣рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдкрд┐рдВрдЧ @mhegazy

рдЯреИрдЧ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ред рдореБрдЭреЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЬрд┐рд╕ рдХрд╛рд░рдг рд╕реЗ рдЗрд╕реЗ рдЕрднреА рддрдХ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд╣ рдореВрд▓реНрдп рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рд╣реИред рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рд╕реНрд╡рдпрдВ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЫреЛрдЯрд╛ рд╣реИ, рдпрд╛рдиреА {...x} рдореЗрдВ Object.assign({}, x) ред рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡реЗ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП T {...T} рдХреЛ T рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, {x: number, ...T} рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ, рдЕрдЧрд░ T рдореЗрдВ рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛, рдЖрджрд┐.. https://github.com/Microsoft/TypeScript/issues/10727 рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдПрдХ рдЖрджрд░реНрд╢ рдЙрдкрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рдгрд╛рд▓реА рд╡реГрджреНрдзрд┐ рдорд╛рдореВрд▓реА рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рджреЗрдЦрдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЙрддреНрд╕рд╛рд╣ рд╕реЗ рдирд┐рдкрдЯрд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ! рдореИрдВ рдмрд╕ рдпрд╣реА рджреЛрд╣рд░рд╛рддрд╛ рд╣реВрдБ,

рдЬрдм рд╣рдо "рд╕рд╣реА" рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдкреНрд░рд╕рд╛рд░ рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рд╕рдорд░реНрдерди + Object.assign рдХреА рд╕рд░рд▓ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рд╕реНрдЯреЙрдкрдЧреИрдк рд╣реЛрдЧреАред рдкрд░рдлреЗрдХреНрдЯ рдХреЛ рдЕрдЪреНрдЫрд╛рдИ рдХрд╛ рджреБрд╢реНрдорди рди рдмрдирдиреЗ рджреЗрдВред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡ рдЪрд░рдг 3 рдкрд░ рдкрд╣реБрдВрдЪ рдЧрдпрд╛ рд╣реИ: https://github.com/tc39/proposals

@ddagan tsx рдХреЗ рд╕рд╛рде рдЖрдкрдХрд╛ рдЙрджрд╛рд╣рд░рдг рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛

рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдордп рд╕реАрдорд╛?

@ SpyMaster356 рдореИрдВ рдЗрд╕реЗ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рдЧреБрдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд░реАрдм рд╣реИред @sandersn рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рд╣рдлреНрддреЛрдВ рд╕реЗ (рдХрдо рд╕реЗ рдХрдо) рдЗрд╕ рдкрд░ рдЧрдзрд╛ рдорд╛рд░ рд░рд╣рд╛ рд╣реИред рдореИрдВ

рдЖрдк рдпрд╣рд╛рдВ (https://github.com/Microsoft/TypeScript/pull/12028) рдФрд░ рдпрд╣рд╛рдВ (https://github.com/Microsoft/TypeScript/pull/11150) рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХрд┐рд╕реА рдХреЛ рд░реЛрдбрдореИрдк рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЕрдЬреНрдЮрд╛рдд рдкреНрд░реЙрдкреНрд╕ рдХреЗ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИ:

interface State {
  a: string;
  b: number;
}

let state: State = { a: "a", b: 0 };

state = {...state, x: "x"}; // No error

рдореИрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рдерд╛ рдХрд┐ x State рдХреА рдЬреНрдЮрд╛рдд рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рд╣реИ?

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдкреАрдЖрд░ рд╕реЗ рдкрд╣рд▓реЗ рдореЗрд░рд╛ рд╡рд░реНрддрдорд╛рди рд╕рдорд╛рдзрд╛рди рдпрд╣ рдерд╛:

state = update(state, { x: "x" }); // Error: Property 'x' is missing in type 'State'.

function update<S extends C, C>(state: S, changes: C): S {
  return Object.assign({}, state, changes);
}

рдХреНрдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдкреНрд░реЗрдб/рдЖрд░рд╛рдо рд╕реЗ рдЗрд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?

рдСрдмреНрдЬреЗрдХреНрдЯ рд░реЗрд╕реНрдЯ рдПрдВрдб рд╕реНрдкреНрд░реЗрдб, ES рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдЕрдиреБрд╕рд╛рд░, Object.assign рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЕрдВрддрд┐рдо рдЙрд▓реНрд▓реЗрдЦ "рдЬреАрддрддрд╛ рд╣реИ"ред рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдХреА рд╕реВрдЪрдирд╛ рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, {...state, x:"X"} рдХрд╛ рдкреНрд░рдХрд╛рд░ { a: string, b:number, x:string } ; рдФрд░ рдпрд╣ рдкреНрд░рдХрд╛рд░ State рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХрд╣рдиреЗ рдЬреИрд╕рд╛ рд╣реА рд╣реИ рдХрд┐ let state: State = { a: "a", b:0, x: "X" }; рдХреЛ рднреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдПрдЧреАред

рд▓реЗрдХрд┐рди рдпрд╣реА рд╡рд╣ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдВ: let state: State = { a: "a", b:0, x: "X" } рддреНрд░реБрдЯрд┐ Object literal may only specify known properties, and 'x' does not exist in type 'State' рджреЗрддрд╛ рд╣реИ рдЬреЛ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ ... рдСрдмреНрдЬреЗрдХреНрдЯ рд╢рд╛рдмреНрджрд┐рдХ рд╕реЗ рдмрд╛рд╣рд░ рдЖрдиреЗ рдкрд░ рдпрд╣ рдПрдХ рд╡реИрдз рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреНрдпреЛрдВ рд╣реИ рдлреИрд▓?

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ .. рд╡рд╕реНрддреБ рд╢рд╛рдмреНрджрд┐рдХ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реИред рдореЗрд░рд╛ рдЙрджрд╛рд╣рд░рдг рдЧрд▓рдд рдерд╛ред рдпрд╣рд╛рдБ рдПрдХ рдмреЗрд╣рддрд░ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

let obj = { a: "a", b:0, x: "X" };
let state: State = obj; // OK

рдпрд╣рд╛рдБ рдореБрджреНрджрд╛ рдЕрдЧрд░ рдмрд▓реНрдХрд┐ рд╡реНрдпрдХреНрддрд┐рдкрд░рдХ рд╣реИред рдЬрдм рд╕рдВрдХрд▓рдХ let state:State = { a: "a", b:0, x: "X" } рджреЗрдЦрддрд╛ рд╣реИ, рддреЛ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ x рдПрдХ рдЯрд╛рдЗрдкреЛ рд╣реИ, рдпрд╛ рддреЛ рдПрдХ рдкреБрд░рд╛рдиреА рд╕рдВрдкрддреНрддрд┐ рдЬрд┐рд╕реЗ рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рдмрд╛рдж рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХрд╛рд░, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЗрд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреНрд░реБрдЯрд┐ред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рдЖрдк рдХреЛрдИ рд╡рд╕реНрддреБ рдлреИрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдорд╛рди рд▓реЗрдВ рдХрд┐ let myConfig : State= { a: 1, ...myOtherBigConfigBag} , рдпрджрд┐ myOtherBigConfigBag рдореЗрдВ рдХреБрдЫ рдРрд╕реЗ рдЧреБрдг рд╣реИрдВ рдЬрд┐рдирдХреА рдЖрдкрдХреЛ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ a рдФрд░ b , рдпрд╣рд╛рдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдЖрдкрдХреЛ рдЗрди рджреЛ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд╕рд┐рдВрдХ рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдЧреА, рдпрд╛ рдЗрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд╛рд▓реА рдЬрд╛рдПрдЧреАред

рдиреЗ рдХрд╣рд╛ рдХрд┐ред рд╣рдореЗрдВ рдЗрд╕ рдлреИрд╕рд▓реЗ рдкрд░ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕реЗ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП https://github.com/Microsoft/TypeScript/issues/12717 рджрд╛рдпрд░ рдХрд┐рдпрд╛ред

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

@aaronbeall рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ, рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп JS рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╖реНрдЯрдкреНрд░рдж рд╣реЛрдЧрд╛ ... рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордп, рдЖрдк рдХреЗрд╡рд▓ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЖрдХрд╛рд░ рд╣реИ рдФрд░ рд╕реАрдзреЗ рд╕реНрдкреНрд░реЗрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдареАрдХ рд╣реИ IMO

рдирдорд╕реНрдХрд╛рд░ рджреЛрд╕реНрддреЛрдВ, рд╢рд╛рдирджрд╛рд░ рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рдмрдзрд╛рдИ! рдЕрдм рдПрдХ рдпреЛрдЧреНрдп рдЖрд░рд╛рдо рдХрд╛ рд╕рдордп рд╣реИ ... рдЪреБрдбрд╝реИрд▓ рдХреА рдмрд╛рдд рдХрд░рдирд╛ рдореБрдЭреЗ рдмрд╛рдХреА рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ :)

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЯрд┐рдкрд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдШрдЯрдХ рд╣реЛрддрд╛ рд╣реИ рдЬреИрд╕реЗ:

export interface MyLinkProps extends React.HTMLAttributes {
    myUrl: string
}

class MyLink{

    render(){
      const {myUrl, ...attrs } = this.props;
     return <a href={calculate(myUrl)} ...attrs>Click here</a>;
   }
}

рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рдорд╛рдЙрд╕ рд╕реЗ attrs рдкрд░ рд╣реЛрд╡рд░ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ React.HtmlAttributes рдХреЗ рдмрдЬрд╛рдп рд╕рднреА рдЧреБрдгреЛрдВ (рд╕реИрдХрдбрд╝реЛрдВ) рдХреА рд╕реВрдЪреА рдорд┐рд▓рддреА рд╣реИред

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╡рд╣ рд╕рдм, рд▓реЗрдХрд┐рди рдмрд╛рдХреА рдЪрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдЕрд╕рд╛рдЗрди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

рдХреБрдЫ рд╡рд┐рдХрд▓реНрдк:

    const {myUrl, ...attrs as React.HtmlAttributes } = this.props; //Is not really a casting

    const {myUrl, ...attrs : React.HtmlAttributes } = this.props; //conflicts with ES6?

    const attrs : React.HTMLAttributes; 
    const { myUrl, ...attrs } = this.props;  //re-declare the variable

@bondz рдареАрдХ рд╣реИ, рдпрд╣ рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ 100% рдЙрдкрдпреЛрдЧреЛрдВ рдореЗрдВ рд╕рдЪ рдирд╣реАрдВ рд╣реИред :) рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдпрд╣ рдмрд╣реБрдд рдХрд╖реНрдЯрдкреНрд░рдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореИрдВ рд░реЗрдбрдХреНрд╕ рдФрд░ рд░рд┐рдПрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕реНрдерд┐рддрд┐ рдХрд╛ рднрд╛рд░реА рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд░рд╛рдЬреНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЕрджреНрдпрддрди рдпрд╛ рдмрдирд╛рдирд╛ рд╣реИ, рдореБрдЭреЗ рд╕рднреА рдкреНрд░реЛрдк рдХреЛ рдПрдХ рдирдИ рд╡рд╕реНрддреБ рд╢рд╛рдмреНрджрд┐рдХ рдкрд░ рдХреЙрдкреА рдХрд░рдирд╛ рд╣реЛрдЧрд╛ ... рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдореБрдЭреЗ 100% рдкреНрд░рдХрд╛рд░ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдореИрдВ рдореИрдВ рд▓рдХреНрд╖реНрдп рд░рд╛рдЬреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рд╕рд╣реА рдбреЗрдЯрд╛ рдХреЙрдкреА рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореИрдВ рдЗрд╕ рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдкреНрд░реЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдХреНрд▓реАрдирд░ (рдкрдардиреАрдп, рдЕрднрд┐рд╡реНрдпрдВрдЬрдХ, рдорд╛рдирдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ред) рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдФрд░ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╡реЗ рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрдкреНрд░рдпреБрдХреНрдд рдпрд╛ рдвреАрд▓реА рд╡рд╕реНрддреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╕рдВрд░рдЪрдирд╛рдПрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдлреА рд╡реНрдпрдХреНрддрд┐рдкрд░рдХ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ #12717 рд╕реБрдЭрд╛рд╡ рдПрдХ рдЕрдЪреНрдЫрд╛ рдордзреНрдп рдореИрджрд╛рди рд╣реИ (рдФрд░ рдореМрдЬреВрджрд╛ рд╡рд╕реНрддреБ рд╢рд╛рдмреНрджрд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рд╕рдВрдЧрдд рд╣реИред)

https://github.com/Microsoft/TypeScript/issues/2103#issuecomment -145688774
рд╣рдо рдЗрд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЪрд░рдг 3 рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд░рд╛рдЬреНрдп 3 рд╣реИ, рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдпреЛрдЬрдирд╛ рд╣реИ?

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рд╣рдо рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдИрдПрд╕ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╡реАрдПрд╕рд╕реАрдУрдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЯреАрдПрд╕ рдЕрднреА рддрдХ рдирд╣реАрдВ :)

@evisong рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рднреЗрдЬ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА vsCode рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред рдЕрдкрдиреЗ vsCode рдХреЛ рд╕рдВрд╕реНрдХрд░рдг 1.8 . рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ

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

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

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

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

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

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

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