ΠΠ΅ΡΡΠΈΡ TypeScript: 2.3.2
ΠΠΎΠ΄
// example.js
var Person = function (firstNameOrPojo, lastName) {
if (typeof firstNameOrPojo === "string") {
this.firstName = firstNameOrPojo;
this.lastName = lastName;
} else {
return new Person(firstNameOrPojo.firstName, firstNameOrPojo.lastName);
}
};
Person.prototype.greet = function greet() {
return `Hello, I am ${this.firstName} ${this.lastName}.`;
};
var fred = new Person({firstName: "Fred", lastName: "Flintstone"});
console.log(fred.greet());
ΠΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅:
Π― ΠΎΠΆΠΈΠ΄Π°Π», ΡΡΠΎ tsc
ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ ΡΡΠΎΡ ΠΊΠΎΠ΄ Π±Π΅Π· ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈΠ»ΠΈ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠΉ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΡΡΠΈΡΡΠ²Π°Ρ, ΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ ΡΠΈΠΏ Π²ΡΠ΅Π³Π΄Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠΌΡ ΡΠΈΠΏΡ.
Π JavaScript ΡΡΠ½ΠΊΡΠΈΡ-ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΠΎΠ³Π΄Π° ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ΄Π΅Π»Π°Π½ΠΎ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ Π²ΡΠ΅Π³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ new
(ΡΠΌ. Π¨Π°Π³ 3 Π² ΡΡΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ MDN Π΄Π»Ρ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ).
ΠΠ°Π±ΠΎΡΡΡΡ ΠΎ ΡΠΈΠΏΠ°Ρ
, Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΠΏΠΎΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ TypeScript Π½Π΅ ΡΠ΅ΡΠΈΠ»ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠ°ΡΡ ΡΡΡ ΠΏΡΠΈΡΡΠ΄Ρ ΡΠ·ΡΠΊΠ° JavaScript. Π ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ², ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΡΡΠΎ ΡΠ²Π½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΡ ΠΆΠ΅ ΡΠΈΠΏ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ» Π±Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠΌ, Π΅ΡΠ»ΠΈ Π±Ρ ΠΎΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΠ» undefined
(ΠΎΠ±ΡΡΠ½ΡΠΉ ΡΠ»ΡΡΠ°ΠΉ). ΠΡΠΌΠ°Ρ, ΡΡΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ:
ΠΡΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΈ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ JavaScript.
ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π²ΡΡΠ΅ ΠΊΠΎΠ΄ ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² Node.js ΠΈ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅:
$ node example.js
Hello, I am Fred Flintstone.
Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅:
tsc
Π²ΡΠ΄Π°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ ΠΏΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°:
$ tsc --allowJs --checkJs --outDir ./dist example.js
example.js(8,16): error TS2350: Only a void function can be called with the 'new' keyword.
Π’ΠΈΠΏ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π²Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΠ΅; ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π·Π½Π°Π΅Ρ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ ΡΠΈΠΏ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΡΠΈΠΏ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°. ΠΎΡΠΈΠ±ΠΊΠ° - ΡΡΠΎ ΡΠΎ, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ Π΄Π»Ρ ΡΠ°ΠΉΠ»Π° .js. ΡΠ°Π±Π»ΠΎΠ½ Π²ΡΠ΅ Π΅ΡΠ΅ Π½Π΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ Π΄Π»Ρ ΡΠ°ΠΉΠ»Π° .ts (ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ ΠΎΡΠΈΠ±Π°Π΅ΠΌΡΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ²Π°ΡΠΈΠ²Π½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Π΅).
+1
ΠΡΠΎΠ±Π΅Π½Π½ΠΎ ΡΠ΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Ρ Π½Π°Ρ Π΅ΡΡΡ Proxy
, Π΅ΡΡΡ Ρ
ΠΎΡΠΎΡΠΈΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ, Π½Π°ΠΏΡΡΠΌΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Ρ ΠΏΡΠΎΠΊΡΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΊΠ»Π°ΡΡΠ°. ΠΠΎ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΅ΡΠ»ΠΈ ΠΌΡ Π½Π΅ ΡΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΠ²Π΅ΡΡΠΈ ΠΈΠ»ΠΈ ΡΠΊΠ°Π·Π°ΡΡ ΡΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°.
Π΅ΡΠ»ΠΈ Π±Ρ Π²Ρ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ
get(target, name) {}
ΠΈ
set(target, name, value) {}
Π²Π½ΡΡΡΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΠΊΠ»Π°ΡΡΠ°, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ² Π΄Π»Ρ (Π»ΡΠ±ΡΡ
Π²ΡΠ΅Ρ
ΡΠ²ΠΎΠΉΡΡΠ²) ΠΎΠ±ΡΠ΅ΠΊΡΠ° / ΠΌΠ°ΡΡΠΈΠ²Π°, ΡΠΎΠ³Π΄Π° Ρ
ΠΎΡΠΎΡΠΎ ... javascript Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΎΡΡΡΠ°Π²Π°ΡΡ.
[Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²Π΅ΡΠ½ΡΡΡ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠΊΡΠΈ Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌΠΈ.]
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
+1
ΠΡΠΎΠ±Π΅Π½Π½ΠΎ ΡΠ΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Ρ Π½Π°Ρ Π΅ΡΡΡ
Proxy
, Π΅ΡΡΡ Ρ ΠΎΡΠΎΡΠΈΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ, Π½Π°ΠΏΡΡΠΌΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Ρ ΠΏΡΠΎΠΊΡΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΊΠ»Π°ΡΡΠ°. ΠΠΎ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΅ΡΠ»ΠΈ ΠΌΡ Π½Π΅ ΡΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΠ²Π΅ΡΡΠΈ ΠΈΠ»ΠΈ ΡΠΊΠ°Π·Π°ΡΡ ΡΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°.