TypeScript — ΡΡΠΎ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠΉ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Microsoft. ΠΠ½ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΡΠΎΠ³ΠΈΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΌ Π½Π°Π΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ JavaScript ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π² ΡΠ·ΡΠΊ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ.
Typescript Π°Π½ΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π» ΡΠ²ΠΎΡ Π±Π΅ΡΠ°-Π²Π΅ΡΡΠΈΡ 4.3 1 Π°ΠΏΡΠ΅Π»Ρ 2021 Π³ΠΎΠ΄Π°, Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΡΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Π½ΠΈΠΆΠ΅
npm install typescript@beta
Π£Π»ΡΡΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ² ΡΠ°Π±Π»ΠΎΠ½Π½ΡΡ
ΡΡΡΠΎΠΊ
Π Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Π²Π²Π΅Π΄Π΅Π½Ρ ΡΠ°Π±Π»ΠΎΠ½Π½ΡΠ΅ Π»ΠΈΡΠ΅ΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠΈΠΏΡ Π΄Π»Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡΠ°Π»ΡΠ½ΠΎ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
ΡΠ°Π±Π»ΠΎΠ½Π½ΡΡ
Π»ΠΈΡΠ΅ΡΠ°Π»ΡΠ½ΡΡ
Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠ΅ΠΌΡ ΠΏΡΠΈ Π²ΡΠ²ΠΎΠ΄Π΅ ΡΠ΅Π»Π΅Π²ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΡΠ°Π±Π»ΠΎΠ½Π½ΠΎΠ³ΠΎ Π»ΠΈΡΠ΅ΡΠ°Π»Π° typescript ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠΌΡ ΡΠΈΠΏΡ ΡΠ°ΠΊΠΆΠ΅ Π±ΡΡΡ ΡΠ°Π±Π»ΠΎΠ½Π½ΡΠΌ Π»ΠΈΡΠ΅ΡΠ°Π»ΡΠ½ΡΠΌ ΡΠΈΠΏΠΎΠΌ.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ ΠΏΡΠΈΠΌΠ΅ΡΡ ΡΠ»ΡΡΡΠ΅Π½Π½ΡΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΉ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ:
type Color = "red" | "blue";
type Quantity = "one" | "two";
type SeussFish = `${Quantity | Color} fish`;
// same as
// type SeussFish = "one fish" | "two fish"
// | "red fish" | "blue fish";
β¦or match patterns of other string-like types.
declare let s1: `${number}-${number}-${number}`;
declare let s2: `1-2-3`;
// Works!
s1 = s2;
ΠΡΠ΅Π³Π΄Π° ΠΏΡΠ°Π²Π΄ΠΈΠ²ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΎΠ±Π΅ΡΠ°Π½ΠΈΠΉ
ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π²ΡΠ±ΡΠΎΡΠ° ΠΎΡΠΈΠ±ΠΊΠΈ ΠΏΡΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ await Π² ΡΡΠ»ΠΎΠ²ΠΈΡΡ
ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΡΠ΅ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ
ΠΠ½Π΄Π΅ΠΊΡΠ½ΡΠ΅ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π·Π°Π΄Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ² Π΄Π»Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΠ΅ΠΌ ΡΠ²Π½ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΎ Π² ΡΠΈΠΏΠ΅. Π ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΡΠ΅ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ ΠΊΠ°ΠΊ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅.
ΠΠ°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΈΠΌΠΏΠΎΡΡΠ°
ΠΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΠΏΠΈΡΠ°ΡΡ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈΠΌΠΏΠΎΡΡΠ°, Π½Π΅ ΠΈΠΌΠ΅ΡΡΠ΅Π΅ ΠΏΡΡΠΈ, typescript ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡ Π΅ΠΌΡ ΡΠΏΠΈΡΠΎΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ
ΠΈΠΌΠΏΠΎΡΡΠΎΠ². ΠΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π·Π°ΡΠΈΠΊΡΠΈΡΡΠ΅Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅, ΠΎΠ½ Π·Π°Π²Π΅ΡΡΠΈΡ ΠΏΠΎΠ»Π½ΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΈΠΌΠΏΠΎΡΡΠ°, Π²ΠΊΠ»ΡΡΠ°Ρ ΠΏΡΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠΎΠ±ΠΈΡΠ°Π»ΡΡ Π½Π°ΠΏΠΈΡΠ°ΡΡ.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠΌΠΏΠΎΡΡΠ° Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π²Π΅ΡΡΠΈΠΈ typescript
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠΎΠΌ ΡΠ΅Π³ΠΎΠ² @link
TypeScript ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠ΅Π³ΠΈ @link ΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΡΡΠ°ΡΡΡΡ ΡΠ°Π·ΡΠ΅ΡΠΈΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ΠΈ ΡΡΡΠ»Π°ΡΡΡΡ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°Π²Π΅ΡΡΠΈ ΠΊΡΡΡΠΎΡ Π½Π° ΠΈΠΌΠ΅Π½Π° Π² ΡΠ΅Π³Π°Ρ
@link ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π±ΡΡΡΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΠΊΠ°ΠΊ go-to-definition ΠΈΠ»ΠΈ find-all-references.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π½ΠΈΠΆΠ΅ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ bar Π² @link bar, ΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ TypeScript ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅Ρ ΠΊ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ bar.
/**
* This function depends on {@link bar}
*/
function foo() {
}
function bar() {
}
ΠΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ Π½Π΅Π»ΡΠ·Ρ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΌΠΈ ΡΠΈΡΠ»Π°ΠΌΠΈ
Π Π΅ΡΠ΅Π½Π½ΡΠΉ Π²ΠΎΠΏΡΠΎΡ ΠΎ ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΡΠΈΡΠ°ΡΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡΠΌΠΈ ΡΠΎΡΠ·Π°, ΠΊΠΎΠ³Π΄Π° ΠΈΡ
ΡΠ»Π΅Π½Ρ Π»ΠΈΠ±ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Ρ, Π»ΠΈΠ±ΠΎ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Π½Ρ. Π ΡΡΠΈΡ
ΡΠ»ΡΡΠ°ΡΡ
ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΠ½ΠΎ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ.
Π Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ, Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Ρ ΡΠΈΠΏΠΎΠΌ union enum ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΡΡΡ Ρ ΡΠΈΡΠ»ΠΎΠ²ΡΠΌ Π»ΠΈΡΠ΅ΡΠ°Π»ΠΎΠΌ, ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΎΠ½Π° Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°Π²Π½Π°, ΡΠΎ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΈΠΏΠΎΠ² Π²ΡΠ΄Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ.
enum E {
A = 0,
B = 1,
}
function doSomething(x: E) {
// Error! This condition will always return 'false' since the types 'E' and '-1' have no overlap.
if (x === -1) {
// ...
}
}
//As a workaround, you can re-write an annotation to include the appropriate literal type.
// Include -1 in the type, if we're really certain that -1 can come through.
function doSomething(x: E | -1) {
if (x === -1) {
// ...
}
}
//You can also use a type-assertion on the value.
function doSomething(x: E) {
// Use a type asertion on 'x' because we know we're not actually just dealing with values from 'E'.
if ((x as number) === -1) {
// ...
}
}
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΠΎΠ²Π°ΡΡ Π²Π°ΡΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΎ ΠΈΠΌΠ΅Π»ΠΎ Π½Π΅ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡ, ΡΠ°ΠΊ ΡΡΠΎ Π»ΡΠ±ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ ΠΈ ΡΡΠ°Π²Π½ΠΈΡΡ Ρ ΡΡΠΈΠΌ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ΠΌ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΎ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
enum E {
// the leading + on 0 opts TypeScript out of inferring a union enum.
A = +0,
B = 1,
}
ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΡΡΠ°ΡΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°Π³Π»ΡΠ½ΡΡΡ ΡΡΠ΄Π°.
Π‘ΡΠ°ΡΡΠ»ΠΈΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄ΠΈΠ½Π³Π°!
ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡΡΠ΅ΡΡ ΡΠΎ ΡΡΠ°ΡΡΠ΅ΠΉ Π·Π΄Π΅ΡΡ:- ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Typescript