1.6 λλ 2.0μμ?
무μμ μ°Ύκ³ μλμ§ νμ€νμ§ μμ΅λλ€. νμ΄νμ μλ―Ένλ€λ©΄ 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;
ꡬνμ μλ―Έν©λλ€. TypeScriptμλ pollyfillμ΄ ν¬ν¨λμ΄ μμ§ μμ΅λλ€. μλ₯Ό λ€μ΄ Mozillaμλ pollyfill μ΄ μμ΅λλ€.
λ―Ήμ€ μΈ ν¨ν΄ νμ΄νμ λν΄ λ¬»λλ€λ©΄ 2.0 λ‘λ맡μμ νμ κ°μ§κ³ μμλ κ²μ λλ€.
κ°μ¬. es3 / es5 / es6λ‘ νΈλμ€ νμΌνλ TypeScriptμμ Object.assign(...)
λ₯Ό μμ±νλ κ²μ μλ―Έν©λλ€. λ°λΌμ 2.0μ λ‘λ맡μ μμ΅λλ€.
: +1 :
@unional λκ° μ€ν΄νμ μ μμ΅λλ€. κ·Έλ¬λ λλ λΉμ μ κ²°λ‘ μ΄ μ³μ§ μλ€κ³ μκ°ν©λλ€.
ES6λ μ΄μ¨λ Object.assign
λ₯Ό μ§μνλ―λ‘ λμμ΄ ES6μ΄λ©΄ μ΄μ¨λ TypeScriptλ‘ μμ±ν μ μμ΅λλ€.
κ·Έλ¬λ es5 μ΄νλ‘ νΈλμ€ νμΌνλ κ²½μ° es5μλ Object.assign
μ΄ μκΈ° λλ¬Έμ μ¬μ ν polyfillμ΄ νμν©λλ€.
λΉ λ₯Έ ν΄κ²° λ°©λ²μΌλ‘μ΄ polyfillκ³Ό μ λ ₯μ κ³ λ €νμμμ€.
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μ λν polyfillμ΄ νμνλ€λ κ²μ μ΄ν΄ν©λλ€.
λ€μ ν λ² κ°μ¬λ립λλ€!
targetμ΄ es5λ‘ μ€μ λλ©΄μ΄ polyfillμ μ»΄νμΌν κΉμ? μ¦, μ»΄νμΌ λμμ΄ es5λ‘ μ€μ λμ΄ μμΌλ―λ‘ es5 νκ²½μμ μλ ν μ μμ΅λλ€.
targetμ΄ es5λ‘ μ€μ λλ©΄μ΄ polyfillμ μ»΄νμΌν κΉμ?
λ€, ν¬λ νλ‘ : μ₯λ―Έ :: λ§ :
μ΄ν΄κ° μ λΌμ λ―Έμ ν΄μ. ES6λ Object.assign
νλ―λ‘ Babelμ ES5 λμμμν ν΄λ¦¬ νλ‘ λ³νν©λλ€. TypeScriptκ° λ€λ₯Έ ES6 κΈ°λ₯κ³Ό λ§μ°¬κ°μ§λ‘ λμΌν κΈ°λ₯μ μννμ§ μλ μ΄μ κ° ν·κ°λ¦½λλ€.
@prashaantt TypeScriptλ Object.assign
λλ μλ‘μ΄ νμ€μ μν΄ μΆκ° λ κΈ°ν κΈ°λ³Έ / λ©μλλ₯Ό μ¬μ©νλ €λ©΄ λ€μ μ€ νλλ₯Ό μνν΄μΌν©λλ€.
@ devoto13 κ°μ¬ν©λλ€, core-js
μ μλν©λλ€.
λ°©κΈ μ΄λ¦¬μμ μ§λ¬Έμ΄μμμ΅λλ€. npm install
ing λ° typings install
ing core-js
νμ ν΄λ¦¬ ν λ©μλμ λν IntelliSenseλ₯Ό μ»κΈ° μμν©λλ€. νμ§λ§ μ¬μ ν μ¬μ©μ€μΈ λͺ¨λ λͺ¨λμμ ν΄λΉ λ©μλλ₯Ό μ€μ λ‘ κ°μ ΈμμΌν©λλ€. κ·Έλ μ§ μμΌλ©΄ μ»΄νμΌ λ μ½λμ ν΄λ¦¬ νμ΄ ν¬ν¨λμ§ μμ΅λλ€.
@prashaantt core-js/shim
μ΄ (κ°) νμν κ²½μ° Object.assign
λ κ·Έ μμ λΆν° μ μΈκ³μ μΌλ‘ μ¬μ©ν μ μμ΅λλ€. λ©μΈ λͺ¨λ / μνΈλ¦¬ ν¬μΈνΈμ 맨 μμ import 'core-js/shim';
λ₯Ό λ£λ κ²μ΄ μ’μ΅λλ€.
κ°μ¬ν©λλ€ @jesseschalken. νμ μ‘°μΉλ‘ shim
μ 체λ₯Ό κ°μ Έ μ€λ©΄ λ²λ€μ΄ λΆνλ €μ§μ§ μλμ? μλλ©΄ tsc
λλ ts-loader
κ° λ΄ μ½λμμ μ€μ λ‘ μ¬μ©λλ κ²λ§ μ νν μμμλ§νΌ λλν κΉμ?
@prashaantt λμ λΈλΌμ°μ μ λ°λΌ λ€λ¦
λλ€. λΉμ μ μ΄λ―Έ Object.assign
κ° λΉμ μ΄ λͺ©νλ‘νλ λΈλΌμ°μ μμ μ§μλμ§ μλλ€λ κ²μ μκ³ μμ΅λλ€. κ°μ₯ κ΄λ²μν λΈλΌμ°μ μ§μμ μνλ©΄ λ²λ€μ μ 체 shimμ΄ νμν©λλ€.
Object.assign
λν polyfill λ§ μνλ κ²½μ° import 'core-js/modules/es6.object.assign';
ν μ μμΌλ©° νμν νλͺ©μ μΆκ° ν μ μμ΅λλ€ (λͺ©λ‘μ core-jsμ shim.js
μ°Έμ‘°). λ¬Έμ). Webpackμ νμ κ·Έλνλ₯Ό λ°λ₯΄κ³ νμν λͺ¨λ λ§ ν¬ν¨ν©λλ€.
μ΄λ―Έ Babelμ μ¬μ©νκ³ μλ€λ©΄ core-jsλ₯Ό μ§μ μ¬μ©νλ λμ import 'babel-polyfill';
λ₯Ό μ¬μ©νλ κ²μ΄ μ’μ΅λλ€. μ¬κΈ°μλ generators / async-awaitμ λν core-js/shim
λΏλ§ μλλΌ regenerator-runtime
λ©λλ€.
νμ μ£Όμ μ κ°μ¬ν©λλ€. μ§κΈ λΉμ₯ μμ ν λ°μ κΈ° μ§μμ μ 곡 ν΄μΌν©λλ€. λ§ κ·Έλλ‘ 2.0μ λν λ§μ§λ§ μ₯μ λ¬Όμ λλ€ !
μ΄ν΄κ° μ λΌμ λ―Έμ ν΄μ. ES6λ Object.assignμ μ§μνλ―λ‘ Babelμ ES5 λμμμν ν΄λ¦¬ νλ‘ νΈλμ€ νμΌν©λλ€. TypeScriptκ° λ€λ₯Έ ES6 κΈ°λ₯κ³Ό λ§μ°¬κ°μ§λ‘ λμΌν κΈ°λ₯μ μννμ§ μλ μ΄μ κ° ν·κ°λ¦½λλ€.
@prashaantt Babel _transpiles_ Object.assign
λΌκ³ νλ©΄ λ¬΄μ¨ λ»μ
λκΉ? κ·Έκ²μ λ¨μ§ κΈ°λ₯μ
λλ€. polyfill, ponyfillμ μΆκ°νκ±°λ μ§μ μμ±ν μ μμΌλ©° ES 3, 5.1, 6 λ± λͺ¨λ νκ²½μμ μ¬μ©ν μ μμ΅λλ€.
@aluanhaddad babelμ΄νλ μΌμ λν λμ μ΄ν΄λ es5λ₯Ό λμμΌλ‘ μ§μ νκ³ Object.assign
λ₯Ό μ¬μ©νλ©΄ Object.assign
λν polyfillμ΄ μλμΌλ‘ ν¬ν¨λκ³ μ¬μ©νμ§ μμΌλ©΄ μ¬μ©νμ§ μλ κ²μ
λλ€. typescriptκ° "es2015μ μμ μ§ν©"μ΄λΌκ³ μ£Όμ₯ν κ²κ³Ό λμΌν μμ
μ μννλ©΄ μ’μ κ²μ
λλ€. μ΄λ μ΄μ λμμΌλ‘ νΈλμ€ νμΌνλ κΈ°λ₯μ μ 곡νμ§ μλ κ²½μ°μλ μ¬μ€μ΄ μλλλ€. (λλ ν릴 μ μμ΅λλ€)
@ devoto13 λμμ΄ es5μ΄λ©΄ μ΅μν Object.assignμ΄ es5μμ μ§μλμ§ μλλ€λ κ²½κ³ λ₯Ό νμν΄μΌν©λλ€. μμ ν μ ν¨νκ³ νλ‘κ·Έλλ¨Έμκ² μμμ ν΄λ¦¬ νμ΄ νμνλ€κ³ λ§νμ§ μλ κ²μ μλ―Έκ° μμ΅λλ€.
@kyleholzinger λΉμ μ΄ μ€λͺ ν κ² (ES5λ₯Ό λμμΌλ‘ ν¨μ Object.assignμ μ¬μ©ν μ μμμ μλ―Έ ν¨)μ μ΄λ―Έ λμμ λλ€.
@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'.
νλ‘μ νΈμμ μΌλΆ polyfillμ λν μ λ ₯μ ν¬ν¨ ν μ μμ§λ§ polyfill ꡬνμ ν¬ν¨νμ§ μκΈ° λλ¬Έμ μ€ν¨ν©λλ€.
λλ κ·Έκ²μ΄ νμ¬μ νλμ΄λΌλ κ²μ μ΄ν΄ν©λλ€. λ΄ μμ μ λμμ es5λ‘ μ§μ νλ©΄ typescriptκ° "μμ±μμ μμ΅λλ€"λ₯Ό λμ΄μ μλ―Έμλ μ€λ₯λ₯Ό μ 곡νλ©΄ μ’μ κ²μ λλ€.
@kyleholzinger FWIW, TypeScript 2.1μ μ΄μ ES6 (ES7?) κ°μ²΄ ν΄μ / νμ°μ μ§μνλ―λ‘ κ°μΈμ μΌλ‘ λ μ΄μ Object.assign
λν΄ μ κ²½ μΈ μ΄μ κ° μ μ΅λλ€. λ€μ΄ν°λΈ μμ±κΈ°λ₯Ό μ¬μ©νλ©΄ λλΆλΆμ νλ‘μ νΈμμ ν΄λ¦¬ νμ΄ νμνμ§ μμ΅λλ€.
μ¬μ€μ λλ€. μΈμ΄ κΈ°λ₯μ μ μΈνμ§ μλ κ²μ΄ μ’μ΅λλ€. Object.assignμ΄ λΈλΌμ°μ μμ‘΄μ μ΄μ§ μμκ³ , polyfillμ μ¬μ©νμ§ μμλ€λ©΄ typescriptκ° κ²½κ³ νλ€λ©΄ μ λ§ μ’μ κ²μ λλ€.
tsconfigκ° μ¬λ°λ₯΄κ² μ€μ λ κ²½μ° TypeScriptλ μ²μμ Object
μμ ν΄λΉ ν¨μ μ΄λ¦μ μλ μμ±νλ μ΅μ
μ μ 곡νμ§ μμμΌλ‘μ¨ <ES6μμ μ¬μ©ν μμλ assign
μ λν΄ κ²½κ³ ν©λλ€. μμΌλ‘ μ΄μ¬ν μ μ΄ λ³΄λ©΄ λΆμ λ¬Όκ²° 무λ¬κ° 보μ
λλ€. μ΄λ₯Ό 무μνλ©΄ tsc
μμ μμ μ€λ₯κ° λ°μν©λλ€. κ·Έλ¬λ λΉμ μ΄ κ·Έκ²μ κ³ μμ μΌλ‘ 무μνλ€λ©΄, λΉμ μ λΉμ°ν λΉμ μ μ΄λͺ
μλ°μ μκ²©μ΄ μμ΅λλ€. ;)
λ§μμ, λ΄ μ μΌν μμ μ es2015 μ¬μμ μμΌλ―λ‘ typescriptμ μμ΄μΌν©λλ€.)
es5
λ₯Ό νκ²ν
νλ λμ λ
Έλμμ Object.assign
μ (λ₯Ό) μ΄λ»κ² μ¬μ©ν©λκΉ? μ¦, μ½λλ λΈλΌμ°μ κ° μλ μλ²μμ μ€νλ©λλ€. ν΄λ¦¬ νλ μ΄λ»κ² μ¬μ©νλμ?
λΏ‘λΏ‘
μ΄λ λ
Έλμ λ²μ μ λ°λΌ λ¬λΌμ§λλ€. μ¦, λͺ¨λ ν΄λ¦¬ ν κ°λ₯ κΈ°λ₯μ κ²½μ°μ²λΌ λ°νμμ λ°λΌ λ¬λΌμ§λλ€.
λ°νμμ΄ Object.assign
μ§μνλμ§ ν
μ€νΈνλ λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€.
$ Node
> Object.assign({ to: 'world' }, { message: 'Hello there!' })
{ to: 'world', message: 'Hello there!' }
μμ μνμ λͺ¨λ λΉμ μ΄ν΄μΌ ν κ²½μ° ISλ ν¬ν¨ "es2017.object"
μμ "compilerOptions"."lib"
λΉμ μ tsconfig.jsonμ μμ±μ.
μμ λ΄μ©μ΄ μ€ν¨νλ©΄ TypeScriptλ‘ μμ±λ μ΄μ κ°μ polyfillμ μΆκ°νμμμ€.
// 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'.
κ·Έλ λ€λ©΄ κΆμ₯ μ¬νμ μ¬μ©νκ³ μ¬λ°λ₯΄κ² μ»΄νμΌνκΈ° μν΄ typescriptλ₯Ό μ»λ λ°©λ²μ΄ μμ΅λκΉ?
@johnbendi μ, νμ€ν.
μ¬μ© μμ²μ νΉμμ±μΌλ‘ μΈν΄ νΉμ νλͺ© "es2017.object"
μΆκ° ν κ²μ μ μνμ΅λλ€.
"lib": ["es6"]
μ΄ λ μ΄μ μ ννμ§ μμΌλ©° "lib": ["es2015"]
μ΄μ΄μΌνλ€κ³ μκ°ν©λλ€.
"lib": ["es2015", es2017.object"]
λλ "lib": ["es2017"]
ν΄λ³΄μΈμ.
λΉ μ§ κ²μ "λλ es6 ν΄λ¦¬ νμ΄ μκ³ λΉμ μ λΉμ¦λμ€ νμ μ€ν¬λ¦½νΈκ° μλλΌκ³ κ°μ νμ"λΌκ³ λ§νλ κΉλν λ°©λ²μ΄λΌκ³ μκ°ν©λλ€. :).
target: "es6"
λ₯Ό μ€μ νλ©΄ κ·Έλ κ² ν μ μμ§λ§ ν΄λ¦¬ ν λΆκ°λ₯ν es6 κΈ°λ₯μ μ¬μ©νμ¬ μ½λλ₯Ό μμ± ν μλ μμ΅λλ€.
core-jsλ₯Ό λͺ μ μ μΌλ‘ μꡬνλ©΄ λ³Έμ§μ μΌλ‘ shimμ΄ νμνλ©° TSκ° λΆννκΈ° λλ¬Έμ shimmy λ° non-shimmy λΉλλ₯Ό κ°μ§ μ μμ΅λλ€.
μΆκ° 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
λ₯Ό polyfillμ λν νΈμΆλ‘ λ³νν©λλ€. libsλ₯Ό μΆκ°ν΄λ λλ₯Ό μν΄ μ무κ²λ λ³κ²½λμ§ μμ΅λλ€.
μ κ²½μ°μλ νμ΄ν ν¨μλ₯Ό μΌλ° ν¨μλ‘ λ³ννκ³ μΆμ§λ§ Object.assign
λ° Array.includes
μ κ°μ μ μ νΈμΆμ κ·Έλλ‘ λ‘λλ€.
tscμλ μ μ λ©μλ Object
, Array
λ±κ³Ό κ°μ polyfill κΈ°λ₯μ΄ μλ ꡬ문 κΈ°λ₯ λ§ νΈλμ€ νμΌνλλ‘ μ리λ νλκ·Έκ° μμ΄μΌν©λλ€.
λ΄κ° λμμ΄μμ λ : "es5"tscλ νμ Object.assignμ polyfillμ λν νΈμΆλ‘ λ³νν©λλ€.
@danez TypeScriptλ Object.assign
νΈμΆμ μμ νμ§ μμ΅λλ€. Babelμ ν΅ν΄ μ½λλ₯Ό μ€ννλ κ² κ°μ΅λκΉ?
@RyanCavanaugh κ·Έλ μ΅λλ€ . Babelμ νλ‘μΈμ€μ κ΄μ¬νμ§ μμ΅λλ€.
κ·Έκ²μ΄νλ μΌμ κΈ°λ³Έμ μΌλ‘ μ΄κ²μ λ³νμν€λ κ²μ
λλ€.
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
@unional μ΄ μ λλ‘ μλ νλ€λ μ μμ. μ»΄νμΌλ¬μλ ꡬ문 μ§μμ μ 곡νκΈ°μν λμ°λ―Έκ° μμ§λ§ μ μμμ κΈ°λ₯μ _ever_ λ€μ μμ±νμ§λ μμ΅λλ€. @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 μ, μκ³ μμ§λ§ λͺ¨λ ES2017 + μ μμ΄ core-jsμ μν΄ ν΄λ¦¬ νλλ es5 _syntax_λ₯Ό λμμΌλ‘ν©λλ€. κ·Έλμ μ κ° λ§νλ κ²μ΄ μ’μ κ²μ es5 ꡬ문μ μΆλ ₯νμ§λ§ λͺ¨λ λ΄μ₯ κΈ°λ₯μ μ¬μ©ν μ μλ€κ³ κ°μ νλ λͺ¨λμ
λλ€. babelμ΄ useBuiltins
μ΅μ
μΌλ‘νλ κ²κ³Ό μ μ¬ν©λλ€ : https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-react-jsx#usebuiltins
μΌλ°μ μΌλ‘ μ°λ¦¬λ "νΌν© λ"λ°νμ λμμ λν νΉλ³ν μ§μμ μ 곡νκΈ° μν΄ λ Έλ ₯νμ§ μμ§λ§ μ¬μ©ν μμλ λ€λ₯Έ μ΅μ μ΄ μμ΅λλ€.
__assign
λ₯Ό μ μ λ²μμ μ½μ
νκ³ (μ : __extends
) --noEmitHelpers
μ€νν μ μμ΅λλ€.
μ, μμ§λ§ es5 _syntax_λ₯Ό νκ²ν νκ³ μμ΅λλ€.
λλ μ΄κ²μ΄ Object.assign
μ κ°μ κΈ°λ₯μ shimmingνμ§ μλ μ£Όμ λ¬Έμ λΌκ³ μκ°ν©λλ€. μ΄λ€ μ μΌλ‘λ μ
μ₯μ μ·¨ν΄μΌν©λλ€. μ€νλ λλ₯Ό μ¬μ©ν λλ μ¬μ©λμ __assign
λ°κΏ μ μμ§λ§ μ§μ νΈμΆ ν λλ μ¬μ©ν μ μμ΅λλ€. μ§μ₯μ²λΌ νΌλ μ€λ½μ΅λλ€.
μ€νλ λλ₯Ό μ¬μ©ν λ μ¬μ©λ²μ __assignμΌλ‘ λ°κΏ μλ μμ§λ§ μ§μ νΈμΆ ν λκ° μλλΌ μ§μ₯μ²λΌ νΌλ μ€λ½μ΅λλ€.
λ λΉμ μ΄ νΌλ μ€λ½λ€κ³ λλΌλ κ²μ μ΄ν΄ν μ μμ§λ§, λ§νΈλΌλ₯Ό μ μ§νλ€λ©΄ TypeScriptλ _ κΈ°λ₯μ polyfills_μ΄ μλ _syntatical rewrites_λ₯Ό μ 곡ν©λλ€. TypeScriptλ μλ λ°©μμ΄ μμ ν μΌκ΄ μ μ΄λ©° μννλ μμ μ λν΄ μκ²¬μ΄ μμΌλ©° 99 %μ κ²½μ° μ΅μ’ μ¬μ©μμκ² μν₯μ λ―ΈμΉμ§ μμ΅λλ€.
@RyanCavanaughκ° λ§νλ―μ΄, --noEmitHelpers
λ° λ€μκ³Ό κ°μ κΈλ‘λ² μ€ν¬λ¦½νΈλ₯Ό μ¬μ©νμ¬ tslib
κ³Ό ν¨κ» ν΄λ¦¬ ν μΈνΈλ₯Ό νμ©ν μ μμ΅λλ€.
__assign = Object.assign;
κ·Έλ¬λ κ·Έκ²μ μ€μ λ‘ "보λμ€ λΌμ΄λ"TypeScriptμ΄λ©° μ€μ μΈ‘μ κ°λ₯ν μ±λ₯ ν₯μμ μ 곡 ν κ²μ΄λΌκ³ μ£Όμ₯ ν μ μμ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
μ΄ν΄κ° μ λΌμ λ―Έμ ν΄μ. ES6λ
Object.assign
νλ―λ‘ Babelμ ES5 λμμμν ν΄λ¦¬ νλ‘ λ³νν©λλ€. TypeScriptκ° λ€λ₯Έ ES6 κΈ°λ₯κ³Ό λ§μ°¬κ°μ§λ‘ λμΌν κΈ°λ₯μ μννμ§ μλ μ΄μ κ° ν·κ°λ¦½λλ€.