ื˜ื™ื™ืคึผืกืงืจื™ืคึผื˜ ืžื•ืกื˜ืขืจ ืฉื˜ืจื™ืงืœ ื˜ื™ื™ืคึผืก

ื•ื•ื™ ืฆื• ื‘ืึทื’ืจืขื ืขืฆืŸ ืฉื˜ืจื™ืงืœ ื˜ื™ื™ืคึผืก ื ื™ืฆืŸ ื“ื™ ืžื•ืกื˜ืขืจ ืฉื˜ืจื™ืงืœ ืžืขืงืึทื ื™ื–ืึทื

ื•ื•ืึธืก ื–ืขื ืขืŸ ืžื•ืกื˜ืขืจ ืœื™ื˜ืขืจืึทืœ ื˜ื™ื™ืคึผืก

ื–ื™ื ื˜ ื˜ื™ืคึผืขืกืงืจื™ืคึผื˜ 4.1, ืื™ืจ ืงืขื ืขืŸ ืคึฟืึทืจื‘ืขืกืขืจืŸ ื“ื™ ื˜ื™ื™ืคึผื™ื ื’ ืคึฟืึทืจ ื“ื™ื™ืŸ ืกื˜ืจื™ื ื’ืก ื‘ืื˜ื™ื™ื˜ื™ืง. ื ืึธืจ ืฆื• ื’ืขืฉื•ื•ื™ื ื“ ืจื™ืงืึทืคึผื˜, ืื™ืŸ ื˜ื™ืคึผืขืกืงืจื™ืคึผื˜ ืื™ืจ ืงืขื ืขืŸ ื“ืขืคื™ื ื™ืจืŸ ืึทื–ื•ื™ ื’ืขืจื•ืคืขื ืข "ืœื™ื˜ืขืจืึทืœ ื˜ื™ื™ืคึผืก". ืึทื ืฉื˜ืึธื˜ ืคึผื•ื ืงื˜ ื“ื™ืคื™ื™ื ื™ื ื’ ืึท ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง ื•ื•ื™ ืฉื˜ืจื™ืงืœ, ืื™ืจ ืงืขื ื˜ ื‘ืึทื’ืจืขื ืขืฆืŸ ื“ืขื ื˜ื™ืคึผ ืฆื• ืึท ืกืคึผืขืฆื™ืคื™ืฉ ืกื›ื•ื ืคื•ืŸ ืกื˜ืจื™ื ื’ืก ื•ื•ืึธืก ื–ืขื ืขืŸ ืขืจืœื•ื™ื‘ื˜.

// Define a mutable string as 'Literal Type'.
let key: "name" | "department" = "name";

// This works, as 'department' is part of the type.
key = "department";
// Won't work, as it's not define in the union type.
key = "company";

// Of course, the same applies for functions.
function getKey(): "name" | "department" {
  return Math.random() <= 0.5 ? "name" : "department";
}

ืกื˜ืึทืจื˜ื™ื ื’ ืžื™ื˜ ื˜ื™ืคึผืขืกืงืจื™ืคึผื˜ 4.1, ื“ืขื ื‘ืึทื’ืจื™ืฃ ืื™ื– ื•ื•ื™ื™ื˜ืขืจ ื“ืขื•ื•ืขืœืึธืคึผืขื“. ื“ื•ืจืš ื ืขืžืขืŸ "ืžื•ืกื˜ืขืจ ืœื™ื˜ืขืจืึทืœ ืกื˜ืจื™ื ื’ืก" ืคึฟื•ืŸ Javascript ื•ื•ื™ ื™ื ืกืคึผื™ืจืึทืฆื™ืข, ืื™ืจ ืงืขื ืขืŸ ืฆื•ืœื™ื™ื’ืŸ ื“ื™ ื–ืขืœื‘ืข ืกื™ื ื˜ืึทืงืก ืคึฟืึทืจ ื“ื™ื™ืŸ ืœื™ื˜ืขืจืึทืœ ื˜ื™ื™ืคึผืก ืื™ืŸ ื˜ื™ื™ืคึผืกืงืจื™ืคึผื˜. ื“ืขืจ ื”ื•ื™ืคึผื˜ ื—ื™ืœื•ืง ืื™ื– ืึทื– ืžื™ื˜ "ื˜ืขืžืคึผืœืึทื˜ืข ืœื™ื˜ืขืจืึทืœ ื˜ื™ื™ืคึผืก" ืื™ืจ ื‘ืึทืงื•ืžืขืŸ ืคื™ืœ ืžืขืจ ื‘ื™ื™ื’ื™ืงื™ื™ื˜, ื•ื•ื™ื™ึทืœ ื“ื™ ื˜ื™ืคึผ ื–ื™ืš ืงืขื ืขืŸ ื ืขืžืขืŸ ืคึผืึทืจืึทืžืขื˜ืขืจืก ืคึฟืึทืจ ื“ืขื ืคืึธืจืขื - ื“ืขืจ ื‘ืึทื’ืจื™ืฃ ืื™ื– ืขื ืœืขืš ืฆื• ื“ื–ืฉืึทื ืขืจื™ืงืก, ืึธื‘ืขืจ ืึท ื‘ื™ืกืœ ืึทื ื“ืขืจืฉ ื•ื•ื™ื™ึทืœ ืขืก ืจื™ืงื•ื•ื™ื™ืขืจื– ืกืคึผืขืฆื™ืคื™ืฉ ื•ื•ืึทืœื•ืขืก.

// Define a Literal Type
type State = "ready";

// Nice, isn't it? As in Javascript's 
// 'template literal strings', we can
// reuse the same syntax for TS.
//
// The create type here is now 'Key-ready'.
type Key = `key-${State}`;
// This of course works for union types as well.
// Let's take these non-descriptive types for a 
// quick demo:
type GraphState = "sleep" | "ready" | "error";
type MachineState = "booting" | "running";

// And here's the 'template literal type':
type EntityState = `ES-${GraphState | MachineState}`;

// The possible combinations therefore 
// work out like this:
//
// type EntityState = 'ES-sleep' 
//  | 'ES-ready'
//  | 'ES-error'
//  | 'ES-booting'
//  | 'ES-running'

ืขืก ืก ืืคื™ืœื• ืžืขืจ ืžื™ื˜ ื˜ื™ื™ืคึผืกืงืจื™ืคึผื˜ 4.3

ื‘ืฉืขืช ืื™ืš ืฉืจื™ื™ื‘ ื“ืขื, ื“ืขืจ ืžืขืœื“ื•ื ื’ ืงืึทื ื“ื™ื“ืึทื˜ ืคึฟืึทืจ ื˜ื™ืคึผืขืกืงืจื™ืคึผื˜ 4.3 ืื™ื– ื‘ืืคืจื™ื™ื˜, ื•ื•ืึธืก ื›ื•ืœืœ ื•ื•ื™ื™ึทื˜ืขืจ ืขื ื›ืึทื ืกืžืึทื ืฅ ืฆื• ืžื•ืกื˜ืขืจ ืœื™ื˜ืขืจืึทืœ ื˜ื™ื™ืคึผืก.

ื“ืขืจ ื˜ื™ืคึผ ืกื™ืกื˜ืขื ืื™ื– ืื™ืฆื˜ ืืคื™ืœื• ืžืขืจ ื“ื™ื ืึทืžื™ืฉ ืื•ืŸ ืงืขื ืขืŸ ื‘ืขืกืขืจ ื•ื™ืกืคื™ืจืŸ ื“ื™ ืจื™ื›ื˜ื™ืง ื˜ื™ื™ืคึผืก ืคึฟืึทืจ ืื™ืจ. ื“ื™ ืœืขืฆื˜ืข ืขื ื“ืขืจื•ื ื’ืขืŸ ื–ืขื ืขืŸ ืžืขืจ ื“ืขืจื•ื•ืึทืงืกืŸ ืžื•ืกื˜ืขืจ ืฉื˜ืจื™ืงืœ ื˜ื™ืคึผ.

// This example is taken 1:1 from 
// Typescript's 4.3 announcement.
// Please check out the link in the
// addendum to see all examples!

declare let s: string;
declare function f<T extends string>(x: T): T;

// Previously: string
// Now       : `hello-${string}`
let x2 = f(`hello ${s}`);

ืžืกืงื ื

ื•ื•ื™ ืื™ืจ ื”ืึธื˜ ื’ืขื–ืขืŸ, ื˜ื™ืคึผืขืกืงืจื™ืคึผื˜ ืื™ื– ืึทื–ืึท ืึท ืฉื˜ืึทืจืง ืฉืคึผืจืึทืš ื•ื•ืขืŸ ืขืก ืงื•ืžื˜ ืฆื• ื“ื™ืคื™ื™ื ื™ื ื’ ื“ื™ื ืึทืžื™ืฉ ื˜ื™ื™ืคึผืก. ื“ืึธืก ืื™ื– ืกืคึผืขืฆื™ืขืœ ืืžืช ืคึฟืึทืจ ื˜ื™ื™ืคึผืก-ื‘ืื–ื™ืจื˜ ื˜ื™ื™ืคึผืก. ืžื™ื˜ ื“ื™ ืœืขืฆื˜ืข ืขื ื“ืขืจื•ื ื’ืขืŸ ืื™ืŸ ื•ื•ืขืจืกื™ืข 4.3, ื“ื™ ื˜ื™ืคึผ ืกื™ืกื˜ืขื ืงืขื ืขืŸ ื‘ืขืกืขืจ ื•ื™ืกืคื™ืจืŸ ื“ื™ ืจื™ื›ื˜ื™ืง ื˜ื™ื™ืคึผืก ื•ื•ื™ ืืœืฅ, ื•ื•ืึธืก ืžืื›ื˜ ืืจื‘ืขื˜ืŸ ืžื™ื˜ ื˜ื™ื™ืคึผืกืงืจื™ืคึผื˜ ื ืึธืจ ืึท ืคืึทืจื’ืขื ื™ื’ืŸ.

ืคึฟืึธืจืฉืœืึธื’ืŸ

ืคึฟืึทืจื‘ื•ื ื“ืขื ืข

ื ืึธืš-ื•ื•ืึธืจื˜

ืฉืคึผืจืึทื›ืŸ