Typescript: Object.assign рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдкрд░ рдХреЛрдИ рд░реЛрдбрдореИрдк?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 9 рдЬреВрди 2015  ┬╖  47рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: microsoft/TypeScript

1.6 рдпрд╛ 2.0 рдореЗрдВ?

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

рдореБрдЭреЗ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдореБрдЭреЗ рд╕рдордЭ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИ ES6 Object.assign рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП Babel рдЗрд╕реЗ ES5 рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдБ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╣реА рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдиреНрдп ES6 рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИред

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

рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХреНрдпрд╛ рдвреВрдВрдв рд░рд╣реЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛ рдорддрд▓рдм рд╣реИ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА lib.es6.d.ts рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

    /**
      * Copy the values of all of the enumerable own properties from one or more source objects to a 
      * target object. Returns the target object.
      * <strong i="6">@param</strong> target The target object to copy to.
      * <strong i="7">@param</strong> sources One or more source objects to copy properties from.
      */
    assign(target: any, ...sources: any[]): any;

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

рдпрджрд┐ рдЖрдк рдорд┐рдХреНрд╕рд┐рди рдкреИрдЯрд░реНрди рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрдЫ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдореЗрд╢рд╛ 2.0 рдХреЗ рд▓рд┐рдП рд░реЛрдбрдореИрдк рдкрд░ рдерд╛ред

рдзрдиреНрдпрд╡рд╛рджред рдореЗрд░рд╛ рдорддрд▓рдм рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдореЗрдВ Object.assign(...) рд╣реИ рдЬреЛ es3 / es5 / es6 рдХреЗ рд▓рд┐рдП рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░рддрд╛ рд╣реИред рддреЛ рдпрд╣ 2.0 рдХреЗ рд▓рд┐рдП рд░реЛрдбрдореИрдк рдкрд░ рд╣реИред

: +1:

@ рд╢рд╛рдпрдж рдореБрдЭреЗ рдХреБрдЫ рдЧрд▓рдд рд╕рдордЭ рдореЗрдВ рдЖрдпрд╛ред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЖрдкрдХрд╛ рдирд┐рд╖реНрдХрд░реНрд╖ рд╕рд╣реА рд╣реИред

ES6 рд╡реИрд╕реЗ рднреА Object.assign рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХрд╛ рд▓рдХреНрд╖реНрдп ES6 рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рд╕реЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк es5 рдФрд░ рдиреАрдЪреЗ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЕрднреА рднреА рдПрдХ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ es5 рдореЗрдВ Object.assign ред

рдПрдХ рддреНрд╡рд░рд┐рдд рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдФрд░ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

interface ObjectConstructor {
    assign(target: any, ...sources: any[]): any;
}

if (typeof Object.assign != 'function') {
  (function () {
    Object.assign = function (target) {
      'use strict';
      if (target === undefined || target === null) {
        throw new TypeError('Cannot convert undefined or null to object');
      }

      var output = Object(target);
      for (var index = 1; index < arguments.length; index++) {
        var source = arguments[index];
        if (source !== undefined && source !== null) {
          for (var nextKey in source) {
            if (source.hasOwnProperty(nextKey)) {
              output[nextKey] = source[nextKey];
            }
          }
        }
      }
      return output;
    };
  })();
}

рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЦреЛрджрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдХрд╛рдлреА рд╕рдордп рдкрд╣рд▓реЗ рдХреА рдмрд╛рдд рд╣реИред :) рд╣рд╛рдБ, рдореИрдВ рдЕрдм рд╕рдордЭрддрд╛ рд╣реВрдБ рдХрд┐ рдпрд╣ es5 рдХреЗ рд▓рд┐рдП рдмрд╕ рдПрдХ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдзрдиреНрдпрд╡рд╛рдж!

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

рдХреНрдпрд╛ рд╣рдо рдЗрд╕ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВрдЧреЗ рдЬрдм рд▓рдХреНрд╖реНрдп рдХреЛ es5 рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдП

рд╣рд╛рдБ, рдПрдХ рдЯрдЯреНрдЯреВ рдХреЗ рд░реВрдк рдореЗрдВ: рдЧреБрд▓рд╛рдм:: рдШреЛрдбрд╝рд╛:

рдореБрдЭреЗ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдореБрдЭреЗ рд╕рдордЭ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИ ES6 Object.assign рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП Babel рдЗрд╕реЗ ES5 рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдБ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╣реА рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдиреНрдп ES6 рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИред

@prashaantt рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдИ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдбрд┐рдЬрд╝рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рд╣реИред рдпрджрд┐ рдЖрдк Object.assign рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЖрджрд┐рдо / рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдирдП рдорд╛рдирдХ рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

@ devoto13 рдзрдиреНрдпрд╡рд╛рдж, core-js рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореЗрд░рд╛ рд╕рд┐рд░реНрдл рдПрдХ рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рд╕рд╡рд╛рд▓ рдерд╛ред npm install ing рдФрд░ typings install ing core-js рдореИрдВ Polyfilled рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП IntelliSense рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдБред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рднреА рд╣рд░ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЙрди рддрд░реАрдХреЛрдВ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬрд╣рд╛рдВ рдореИрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдпрд╛ рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб рдореЗрдВ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд╣реИ рдирд╛?

@prashaantt рдПрдХ рдмрд╛рд░ core-js/shim рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрд╕ рдмрд┐рдВрджреБ рд╕реЗ Object.assign рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред рдореИрдВ рдЖрдкрдХреЗ рдореБрдЦреНрдп рдореЙрдбреНрдпреВрд▓ / рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ import 'core-js/shim'; рдбрд╛рд▓рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред

рдзрдиреНрдпрд╡рд╛рдж @jesseschalken рдЕрдиреБрд╡рд░реНрддреА рдХреЗ рд░реВрдк рдореЗрдВ, рдореЗрд░реЗ рдмрдВрдбрд▓ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реЗ shim рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ? рдпрд╛ tsc рдпрд╛ ts-loader рдХреЗрд╡рд▓ рдЙрди рдЪреАрдЬреЛрдВ рдХреЛ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдорд╛рд░реНрдЯ рд╣реЛрдВрдЧреЗ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ?

@prashaantt рдпрд╣ рдЙрди рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рд▓рдХреНрд╖рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ Object.assign рдПрдХ рдРрд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рд▓рдХреНрд╖рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдФрд░ рдХреНрдпрд╛ рдирд╣реАрдВ рд╣реИ? рдпрджрд┐ рдЖрдк рд╡рд┐рд╕реНрддреГрдд рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдорд░реНрдерди рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдмрдВрдбрд▓ рдореЗрдВ рдкреВрд░реЗ рд╢рд┐рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ Object.assign рд▓рд┐рдП рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк import 'core-js/modules/es6.object.assign'; , рдФрд░ рдЕрдзрд┐рдХ рдЪреАрдЬрд╝реЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рд╣реА рдЖрдкрдХреЛ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рд╕реВрдЪреА рдореЗрдВ shim.js рдХреЛрд░ рдХреЗ рд▓рд┐рдП

рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреИрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдореИрдВ рд╕реАрдзреЗ рдХреЛрд░-рдЬреЗрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп import 'babel-polyfill'; рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рдЗрд╕рдореЗрдВ core-js/shim рд▓реЗрдХрд┐рди рдЬрдирд░реЗрдЯрд░ / async-wait рдХреЗ рд▓рд┐рдП regenerator-runtime ред

рдпреБрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреВрд░реНрдг рдЬрдирд░реЗрдЯрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐рд╕реА рднреА рдХреНрд╖рдг рдХрд╛ рдЕрдВрддрд┐рдо рдмрд╛рдзрд╛ !

рдореБрдЭреЗ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдореБрдЭреЗ рд╕рдордЭ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИ ES6 Object.assign рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмреИрдмрд▓ рдЗрд╕реЗ ES5 рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдБ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╣реА рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдиреНрдп ES6 рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИред

@prashantt рдЬрдм рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ Object.assign ? рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдлрдВрдХреНрд╢рди рд╣реИред рдЖрдк рдкреЙрд▓реАрдлрд┐рд▓, рдкреЛрдиреАрдлрд┐рд▓ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдк рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рдкрд░реНрдпрд╛рд╡рд░рдг - рдИрдПрд╕ 3, 5.1, 6, рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@aluanhaddad рдмрд╛рдмреЗрд▓ рдХреА рдореЗрд░реА рд╕рдордЭ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк es5 рдХреЛ рдЕрдкрдиреЗ рд▓рдХреНрд╖реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ Object.assign , рддреЛ рдЗрд╕рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ Object.assign рд▓рд┐рдП рдПрдХ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдиреЗ рд╡рд╣реА рдХрд╛рдо рдХрд┐рдпрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдЙрд╕рдХрд╛ рджрд╛рд╡рд╛ рд╣реИ рдХрд┐ рдпрд╣ "es2015 рдХрд╛ рд╕реБрдкрд░рд╕реЗрдЯ" рд╣реИ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдЪ рдирд╣реАрдВ рд╣реИ рдЕрдЧрд░ рдпрд╣ рдкреБрд░рд╛рдиреЗ рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред (рдореБрдЭрд╕реЗ рдЧрд▓рддреА рднреА рд╣реЛ рд╕рдХрддреА рд╣реИ)

@ devoto13 рдЕрдЧрд░ рдЖрдкрдХрд╛ рд▓рдХреНрд╖реНрдп es5 рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдлреЗрдВрдХрдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ .assign es5 рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╢реВрдиреНрдп рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡реИрдз рд╣реИ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХреБрдЫ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкреЙрд▓реАрдлрд┐рд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

@kyleholzinger рдЬреЛ рдЖрдкрдиреЗ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ (рдИрдПрд╕ 5 рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрд░реНрде рд╣реИ рдСрдмреНрдЬреЗрдХреНрдЯред рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ) рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИред

@kyleholzinger рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреНрд░реБрдЯрд┐

// test.ts
let t = Object.assign({}, {});
// tsconfig.json
{ "target": "es5" }

рдФрд░ рдлрд┐рд░ рдЙрд╕ рдкрд░ tsc рдЪрд▓рд╛рдПрдВред рдЖрдкрдХреЛ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдорд┐рд▓реЗрдЧреА:

$ tsc
test.ts(1,16): error TS2339: Property 'assign' does not exist on type 'ObjectConstructor'.

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

рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИред рдореЗрд░рд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рд▓рдХреНрд╖реНрдп рдХреЛ es5 рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдиреЗ рдЖрдкрдХреЛ "рдпрд╣ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдкрд░ рдирд╣реАрдВ рд╣реИ" рд╕реЗ рдкрд░реЗ рдПрдХ рд╕рд╛рд░реНрдердХ рддреНрд░реБрдЯрд┐ рджреАред

@kyleholzinger FWIW, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 2.1 рдЕрдм ES6 (ES7?) рдСрдмреНрдЬреЗрдХреНрдЯ рд░реЗрд╕реНрдЯ / рд╕реНрдкреНрд░реЗрдб рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ Object.assign рдмрд╛рд░реЗ рдореЗрдВ рдкрд░реЗрд╢рд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рдХрд╛рд░рдг рдвреВрдВрдврддрд╛ рд╣реВрдВред рджреЗрд╢реА рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЕрдкрдиреА рдЕрдзрд┐рдХрд╛рдВрд╢ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдХрд┐рд╕реА рднреА рдкреЙрд▓реАрдлрд┐рд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

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

рдпрджрд┐ рдЖрдкрдХрд╛ tsconfig рд╕рд╣реА рд╕реЗрдЯ рд╣реИ, рддреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ Object рдкрд░ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо рд╕реНрд╡рдд: рдкреВрд░реНрдг рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рди рджреЗрдХрд░ <ES6 рдХреЗ рд▓рд┐рдП assign рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд╢реНрд░рдорд╕рд╛рдзреНрдп рд░реВрдк рд╕реЗ рдЗрд╕реЗ рд╣рд╛рде рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд▓рд╛рд▓ рджрд╕реНрддреЛрдВ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ tsc рдЖрдкрдХреЛ рдЙрдкрд░реЛрдХреНрдд рддреНрд░реБрдЯрд┐ рджреЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рднреА рдЬрд╛рдирдмреВрдЭрдХрд░ рдЙрд╕ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдВрдЧреЗ, рддреЛ рдЖрдк рдЕрдкрдиреЗ рдХрдпрд╛рдордд рдХреЗ рд╣рдХрджрд╛рд░ рд╣реИрдВред ;)

рд╕рд╣реА, рдореЗрд░рд╛ рдПрдХрдорд╛рддреНрд░ рдмрд┐рдВрджреБ es2015 рдпреБрдХреНрддрд┐ рдореЗрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП;)

рдореИрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реВрдБ Object.assign рдиреЛрдб рдкрд░ рд▓рдХреНрд╖реНрдп рдХрд░рддреЗ рд╣реБрдП es5 ? рдпрд╛рдиреА рдХреЛрдб рд╕рд░реНрд╡рд░ рдкрд░ рдЪрд▓рдирд╛ рд╣реИ рди рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд░ рдореЗрдВред рдХреНрдпрд╛ рдореИрдВ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдБ рдФрд░ рдХреИрд╕реЗ?

@johnbendi
рдпрд╣ рдиреЛрдб рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдпрд╣ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рд╕рднреА рдкреЙрд▓реАрдлрд┐рд▓реЗрдмрд▓ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдкрдХрд╛ рд░рдирдЯрд╛рдЗрдо Object.assign рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

$ Node 
> Object.assign({ to: 'world' }, { message: 'Hello there!' })
{ to: 'world', message: 'Hello there!' }

рдпрджрд┐ рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдХрд╛рд░реНрдп рдЖрдкрдХреЛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ "es2017.object" "compilerOptions"."lib" рдореЗрдВ рдЖрдкрдХреА tsconfig.json рдХреА рд╕рдВрдкрддреНрддрд┐ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВред

рдпрджрд┐ рдпрд╣ рдКрдкрд░ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдЬреЛрдбрд╝реЗрдВ, рдЬреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред

// polyfill-object-assign.ts

if (typeof Object.assign !== 'function') {
  Object.assign = function (target, ...args) {

    if (!target) {
      throw TypeError('Cannot convert undefined or null to object');
    }
    for (const source of args) {
      if (source) {
        Object.keys(source).forEach(key => target[key] = source[key]);
      }
    }
    return target;
  };
}

рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдЖрдпрд╛рдд рдХрд░реЗрдВ

import './polyfill-object-assign';

рдФрд░ рдЖрдкрдХреЗ tsconfig.json рдореЗрдВ рднреА рд╡рд╣реА рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВ рдЬреЛ рд░рдирдЯрд╛рдЗрдо рд╕рдорд░реНрдерд┐рдд рдХреЗрд╕ рдХреЗ рд▓рд┐рдП рд╣реИред

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдорджрдж рдХрд░реЗрдВрдЧреЗ

@aluanhaddad рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред рдореЗрд░реЗ рдиреЛрдб рдиреЗ Object.assign рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬреЛ рдЖрдкрдиреЗ рдореБрдЭреЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдерд╛ред рд▓реЗрдХрд┐рди "compilerOptions": { "lib": ["es2017.object"] } рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рднреА рдореБрдЭреЗ рдЕрднреА рднреА squiggles рдорд┐рд▓рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдореБрдЭреЗ рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬреЛ рдореИрдВ рдЗрд╕реЗ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

@aluanhaddad рдХрднреА рдмреБрд░рд╛ рдирд╣реАрдВ

@aluanhaddad рдкрд╣рд▓реЗ рдореЗрд░реЗ рдкрд╛рд╕ "compilerOptions": { "lib": ["es2017.object", "es6"] } рдерд╛ рдЬрдм рдореБрдЭреЗ squiggles рдорд┐рд▓ рд░рд╣рд╛ рдерд╛ред es6 рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рдирд╛ рдкреНрд░рддреАрдд рд╣реЛ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореЗрд░реА gulp рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреБрди: рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рдЕрдЪрд╛рдирдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдореВрд╣ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред
рдореЗрд░реА tsconfig.json:

{
    "compilerOptions": {
        "target": "es5",
        "module": "commonjs",
        "moduleResolution": "node",
        "lib": ["es2017.object"],
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "sourceMap": true,
        "inlineSources": true,
        //"noImplicitAny": true,
        "declaration": true,
        "noFallthroughCasesInSwitch": true,
        // "noImplicitReturns": true,
        "removeComments": true,
        "stripInternal": true,
        "outDir": "dist"
    },
    "files": ["src/main.ts"],
    "include": [
        "src/**/*.ts"
    ],
    "exclude": [
        "node_modules"
    ]
}

рдореЗрд░реА рдирдИ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдирдореВрдирд╛:

error TS2318: Cannot find global type 'Array'.
error TS2318: Cannot find global type 'Boolean'.
error TS2318: Cannot find global type 'Function'.
error TS2318: Cannot find global type 'IArguments'.
error TS2318: Cannot find global type 'Number'.
error TS2318: Cannot find global type 'RegExp'.
error TS2318: Cannot find global type 'String'.
error TS2339: Property 'bind' does not exist on type '(message?: any, ...optionalParams: {}) => void'.
error TS2339: Property 'bind' does not exist on type '(message?: any, ...optionalParams: {}) => void'.
error TS2322: Type '{}' is not assignable to type
error TS2304: Cannot find name 'Promise'.

рддреЛ рдХреНрдпрд╛ рдЖрдкрдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рднреА рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрдХрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ?

@ рдЬреЛрдВрдмреЗрдиреНрджреА рд╣рд╛рдВ, рдЬрд░реВрд░ред

рдЙрдкрдпреЛрдЧ рдореИрдВ рдХреЗрд╡рд▓ рдЖрдкрдХреЗ рдЕрдиреБрд░реЛрдз рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреЗ рдХрд╛рд░рдг рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ "es2017.object" рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣рд╛ рдерд╛ред
рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ "lib": ["es6"] рдЕрдм рд╕рд╣реА рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрд╣ "lib": ["es2015"] рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
"lib": ["es2015", es2017.object"] рдпрд╛ рд╕рд┐рд░реНрдл "lib": ["es2017"] рдЖрдЬрд╝рдорд╛рдПрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреЛ рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ рд╡рд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдл рддрд░реАрдХрд╛ рд╣реИ "рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ es6 рдкреЙрд▓реАрдлрд╝рд┐рд▓ рд╣реИ рдФрд░ рдпрд╣ рдЖрдкрдХреА рдЦрд╝реБрд╢реА рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдорд╛рди рд▓реАрдЬрд┐рдП рдореИрдВ рдХрд░рддрд╛ рд╣реВрдВ" :)ред

рдХреНрдпреЛрдВрдХрд┐, target: "es6" рд╕реНрдерд╛рдкрдирд╛ рд╡рд╣ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрднрд╡рдд: рдЧреИрд░-рдкреЙрд▓реАрдлрд┐рд▓рдмрд▓ es6 рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рднреА рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред

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

node_modules/typescript/lib/lib.es6.d.ts files tsconfig.json рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди .. рдЗрддрдирд╛ рд╕рд╛рдл рдирд╣реАрдВ рджрд┐рдЦрддрд╛ ... (рдпрд╛ рдХреНрдпрд╛ рдореИрдВ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХрд╛ рдпрд╛рдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ?)

@himdel рд╕рд┐рд░реНрдл рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

{
  "compilerOptions": {
    "lib": [
      "es2015"
    ]
  }
}

рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдореИрдВ рдЗрд╕реЗ рдорд╣реАрдиреЛрдВ рд╕реЗ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдпрд╛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рднреА рд╕рдмрд╕реЗрдЯ:

{
  "compilerOptions": {
    "lib": [
      "es2015.core",
      "es2016.array.include"
    ]
  }
}

рдореИрдВ рдЕрднреА рднреА рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред рдЬрдм рдореЗрд░реЗ рдкрд╛рд╕ target: "es5" tsc рд╣реЛрдЧрд╛, рддреЛ рд╣рдореЗрд╢рд╛ рдХреБрдЫ рдХреЙрд▓ рдореЗрдВ Object.assign рдХреЛ рдкреЙрд▓реАрдлрд┐рд▓ рдореЗрдВ рдмрджрд▓ рджреЗрдЧрд╛ред рд▓рд┐рдмрд╛рд╕ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рддреАрд░ рдлрд╝рдВрдХреНрд╢рди рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рдПрдВ, рд▓реЗрдХрд┐рди Object.assign рдФрд░ Array.includes рдЬреИрд╕реЗ рдЕрдиреИрддрд┐рдХ рдХреЙрд▓ рдЫреЛрдбрд╝ рджреЗрдВред

tsc рдореЗрдВ рдХреЗрд╡рд▓ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдлреАрдЪрд░реНрд╕ рдХреЛ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлреНрд▓реИрдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рди рдХрд┐ рдкреЙрд▓реАрдлрд┐рд▓ рдлреАрдЪрд░реНрд╕ рдЬреИрд╕реЗ рд╕реНрдЯреИрдЯрд┐рдХ рдореЗрдердбреНрд╕ Object , Array рдЖрджрд┐ред

рдЬрдм рдореЗрд░реЗ рдкрд╛рд╕ рд▓рдХреНрд╖реНрдп рд╣реЛрддрд╛ рд╣реИ: "es5" tsc рд╣рдореЗрд╢рд╛ рдХреБрдЫ рдХреЙрд▓ рдореЗрдВ Object.assign рдХреЛ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдореЗрдВ рдмрджрд▓ рджреЗрдЧрд╛ред

@danez рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЙрд▓ рдХреЛ Object.assign рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреЛрд▓рд╛рд╣рд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдирд╛ рдХреЛрдб рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ?

@RyanCavanaugh рдпрд╣ рдХрд░рддрд╛ рд╣реИред рдмрд╛рдмреЗрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред
рдпрд╣ рдЬреЛ рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдмрджрд▓ рд░рд╣рд╛ рд╣реИ:

var a = Object.assign({}, {});

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ

var __assign = (this && this.__assign) || Object.assign || function(t) {
    for (var s, i = 1, n = arguments.length; i < n; i++) {
        s = arguments[i];
        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
            t[p] = s[p];
    }
    return t;
};
var a = _assign({}, {});

@danez рдХреНрдпрд╛ рдЖрдк рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ

рдореЗрд░реЗ рдкрд╛рд╕ рд░реЗрдкреЛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ tsconfig рд╣реИ:

{
  "compilerOptions": {
    "noImplicitAny": true,
    "strictNullChecks": true,
    "module": "ES2015",
    "target": "es5",
    "outDir": "js/lib/es"
  },
  "include": [
    "js/**/*.ts",
  ],
  "exclude": [
    "**/__tests__/**/*.ts"
  ]
}

рдФрд░ рдлрд┐рд░ рдореИрдВ рдмрд╕ tsc рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВ

@danez рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ

C:\Throwaway\oat>type a.ts
var a = Object.assign({}, {});

C:\Throwaway\oat>type tsconfig.json
{
  "compilerOptions": {
    "noImplicitAny": true,
    "strictNullChecks": true,
    "module": "ES2015",
    "target": "es5",
    "outDir": "js/lib/es"
  },
  "include": [
    "*.ts",
  ]
}
C:\Throwaway\oat>tsc
a.ts(1,16): error TS2339: Property 'assign' does not exist on type 'ObjectConstructor'.

C:\Throwaway\oat>type js\lib\es\a.js
var a = Object.assign({}, {});

рд╢рд╛рдпрдж рд╕рдВрдмрдВрдзрд┐рдд: https://github.com/Microsoft/TypeScript/issues/12901

@ рдЗрд╕рдореЗрдВ рд╡рд╣ рдареАрдХ рд╕реЗ @danez рдХрд┐ рдЯрд╛рдЗрдкрдХрд░реНрддрд╛ рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рд╕рд╣рд╛рдпрдХ рдХрднреА рд╕реБрд▓рдн рдирд╣реАрдВ рд╣реИред

const foo = { foo: 'bar' };
const bar = { ...foo };

рдЙрддреНрд╕рд░реНрдЬрди рд╣реЛрдЧрд╛:

var __assign = (this && this.__assign) || Object.assign || function(t) {
    for (var s, i = 1, n = arguments.length; i < n; i++) {
        s = arguments[i];
        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
            t[p] = s[p];
    }
    return t;
};
var foo = { foo: 'bar' };
var bar = __assign({}, foo);

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЖрдк рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд╣рд╛рдВ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд░рддреЗ рд╣реИрдВ Object.assign() рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ __assign , рдпрд╣ рдХреЗрд╡рд▓ рд╡рд╕реНрддреБ рдкреНрд░рд╕рд╛рд░ рд╡рд╛рдХреНрдп-рд╕рдорд░реНрдерди рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

@kitsonk рд╣рд╛рдБ рдореИрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдкреНрд░реЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛, рдЖрдк рд╕рд╣реА рд╣реИрдВред рддреЛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╡рд╕реНрддреБ-рдкреНрд░рд╕рд╛рд░ рдХреЗрд╡рд▓ Object.assign рд░реВрдкрд╛рдВрддрд░рд┐рдд рд╣реЛ рдЬрд╛рдП

@danez рдпрд╣ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдк рдХрд┐рд╕реА рдРрд╕реА рдЪреАрдЬ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ Object.assign() (рдЬреИрд╕реЗ рд▓рдХреНрд╖реНрдп es2015 + рд╣реИ)ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣:

const foo = { foo: 'bar' };
const bar = { ...foo };

рдЙрддреНрдкрд╛рджрди рд╣реЛрдЧрд╛:

const foo = { foo: 'bar' };
const bar = Object.assign({}, foo);

@kitsonk рд╣рд╛рдВ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ es5 _syntax_ рдХреЛ рдирд┐рд╢рд╛рдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ, рд╕рднреА ES2017 + рдЧреНрд▓реЛрдмрд▓реНрд╕ рдХреЛ рдХреЛрд░-рдЬреЗрдПрд╕ рджреНрд╡рд╛рд░рд╛ рдкреЙрд▓реАрдлрд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рддреЛ рдЬреЛ рдореИрдВ рдмрддрд╛ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдПрдХ рдРрд╕рд╛ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ es5 рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдмрд┐рд▓ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдмрд╛рдмреЗрд▓ useBuiltins рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░ рд░рд╣реА рд╣реИ, рдЗрд╕рдХреЗ рд╕рдорд╛рди: https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-react-jsx#uscuiltins

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рд╣рдо "рдорд┐рд╢реНрд░рд┐рдд" рд░рдирдЯрд╛рдЗрдо рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рд╡рд┐рд╢реЗрд╖ рд╕рдорд░реНрдерди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд░рд╛рд╕реНрддреЗ рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдЙрдкрд▓рдмреНрдз рд╣реИрдВред

рдЖрдк рд╡реИрд╢реНрд╡рд┐рдХ рджрд╛рдпрд░реЗ рдореЗрдВ __assign (рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рд╕рд╣рд╛рдпрдХреЛрдВ, рдЬреИрд╕реЗ __extends ) рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ --noEmitHelpers ред

рд╣рд╛рдВ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ es5 _syntax_ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ Object.assign рдЬреИрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рди рдЪрдордХрд╛рдиреЗ рд╡рд╛рд▓реА рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рд╣реИред рдПрдХ рддрд░рд╣ рд╕реЗ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рд░реБрдЦ рд▓реЗрдирд╛ рд╣реЛрдЧрд╛ - рдЖрдк рдПрдХ рдкреНрд░рд╕рд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп __assign рд╕рд╛рде рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдЗрд╕реЗ рд╕реАрдзреЗ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдирд░рдХ рдХреЗ рд░реВрдк рдореЗрдВ рднреНрд░рд╛рдордХ рд╣реИ

рдЖрдк рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ __assign рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдПрдХ рд╕реНрдкреНрд░реЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдЗрд╕реЗ рд╕реАрдзреЗ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдирд░рдХ рдХреЗ рд░реВрдк рдореЗрдВ рднреНрд░рдорд┐рдд рд╣реЛрддрд╛ рд╣реИ

рдореИрдВ рд╕рдордЭ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рднреНрд░рд╛рдордХ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдордВрддреНрд░ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ _syntatical rewrites_ рдирд╣реАрдВ _functional polyfills_ред рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрдЧрдд рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд░рд╛рдп рджреА рдЧрдИ рд╣реИ, рдФрд░ 99% рд╕рдордп рдЗрд╕рдХрд╛ рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ @RyanCavanaugh рдХрд╣рддрд╛ рд╣реИ, tslib , --noEmitHelpers рдкреНрд▓рд╕ рдХреЗ рд╕рд╛рде рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рд▓рд┐рдкрд┐ рдЬреЛ рдХрд╣рддреА рд╣реИ:

__assign = Object.assign;

рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рдмреЛрдирд╕ рджреМрд░" рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рддрд░реНрдХ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдФрд╕рдд рджрд░реНрдЬреЗ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рд╕реБрдзрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред

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

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

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

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

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

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

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