TypeScriptãžã§ããªã¯ã¹ã®å æ¬çã¬ã€ããæ§æãå©ç¹ãé«åºŠãªäœ¿çšæ³ãã°ããŒãã«ãœãããŠã§ã¢éçºã«ãããè€éãªããŒã¿åã®åãæ±ãã«é¢ãããã¹ããã©ã¯ãã£ã¹ã解説ã
TypeScriptãžã§ããªã¯ã¹ïŒå ç¢ãªã¢ããªã±ãŒã·ã§ã³ã®ããã®è€éãªããŒã¿åã®ç¿åŸ
JavaScriptã®ã¹ãŒããŒã»ããã§ããTypeScriptã¯ãéçåä»ãã«ãã£ãŠãéçºè ãããå ç¢ã§ä¿å®æ§ã®é«ãã³ãŒããæžãããšãå¯èœã«ããŸãããã®æã匷åãªæ©èœã®äžã€ããžã§ããªã¯ã¹ã§ãããžã§ããªã¯ã¹ã䜿çšãããšãåå®å šæ§ãç¶æããªããæ§ã ãªããŒã¿åãæ±ããã³ãŒããèšè¿°ã§ããŸãããã®ã¬ã€ãã§ã¯ãTypeScriptã®ãžã§ããªã¯ã¹ãå æ¬çã«æ¢æ±ããã°ããŒãã«ãªãœãããŠã§ã¢éçºã®æèã«ãããè€éãªããŒã¿åãžã®å¿ç𿹿³ã«çŠç¹ãåœãŠãŸãã
ãžã§ããªã¯ã¹ãšã¯äœãïŒ
ãžã§ããªã¯ã¹ã¯ãç°ãªãåãæ±ããåå©çšå¯èœãªã³ãŒããèšè¿°ããæ¹æ³ãæäŸããŸãããµããŒããããåããšã«é¢æ°ãã¯ã©ã¹ãåå¥ã«æžã代ããã«ãåãã©ã¡ãŒã¿ã䜿çšããåäžã®é¢æ°ãã¯ã©ã¹ãèšè¿°ã§ããŸãããããã®åãã©ã¡ãŒã¿ã¯ã颿°ãã¯ã©ã¹ãåŒã³åºããããã€ã³ã¹ã¿ã³ã¹åããããããéã«äœ¿çšãããå®éã®åã®ãã¬ãŒã¹ãã«ããŒãšãªããŸããããã¯ãæ§é å ã®ããŒã¿åãå€åããå¯èœæ§ãããè€éãªããŒã¿æ§é ãæ±ãéã«ç¹ã«äŸ¿å©ã§ãã
ãžã§ããªã¯ã¹ã䜿çšããå©ç¹
- ã³ãŒãã®åå©çšæ§ïŒ äžåºŠæžããã³ãŒããç°ãªãåã§å©çšã§ããŸããããã«ãããã³ãŒãã®éè€ãæžããã³ãŒãããŒã¹ã®ä¿å®æ§ãåäžããŸãã
- åå®å šæ§ïŒ ãžã§ããªã¯ã¹ã«ãããTypeScriptã³ã³ãã€ã©ã¯ã³ã³ãã€ã«æã«åå®å šæ§ã匷å¶ã§ããŸããããã«ãããåã®äžäžèŽã«é¢é£ããå®è¡æãšã©ãŒãé²ãã®ã«åœ¹ç«ã¡ãŸãã
- å¯èªæ§ã®åäžïŒ ãžã§ããªã¯ã¹ã¯ã颿°ãã¯ã©ã¹ãã©ã®åãæ±ãããã«èšèšãããŠããããæç¢ºã«ç€ºãããšã§ãã³ãŒãã®å¯èªæ§ãé«ããŸãã
- ããã©ãŒãã³ã¹ã®åäžïŒ å Žåã«ãã£ãŠã¯ãã³ã³ãã€ã©ã䜿çšãããç¹å®ã®åã«åºã¥ããŠçæãããã³ãŒããæé©åã§ããããããžã§ããªã¯ã¹ãããã©ãŒãã³ã¹ã®åäžã«ã€ãªããããšããããŸãã
ãžã§ããªã¯ã¹ã®åºæ¬æ§æ
ãžã§ããªã¯ã¹ã®åºæ¬æ§æã§ã¯ãå±±æ¬åŒ§ïŒ< >ïŒã䜿çšããŠåãã©ã¡ãŒã¿ã宣èšããŸãããããã®åãã©ã¡ãŒã¿ã¯éåžžãTãKãVãªã©ãšåä»ããããŸãããä»»æã®æå¹ãªèå¥åã䜿çšã§ããŸãã以äžã¯ããžã§ããªãã¯é¢æ°ã®ç°¡åãªäŸã§ãïŒ
function identity<T>(arg: T): T {
return arg;
}
let myString: string = identity<string>("hello");
let myNumber: number = identity<number>(123);
let myBoolean: boolean = identity<boolean>(true);
console.log(myString); // Output: hello
console.log(myNumber); // Output: 123
console.log(myBoolean); // Output: true
ãã®äŸã§ã¯ã<T>ãTãšããååã®åãã©ã¡ãŒã¿ã宣èšããŠããŸãã颿°identityã¯åTã®åŒæ°ãåãåããåTã®å€ãè¿ããŸãã颿°ãåŒã³åºãéã«ãåãã©ã¡ãŒã¿ãæç€ºçã«æå®ããïŒäŸïŒidentity<string>ïŒããšããTypeScriptã«åŒæ°ã®åããæšè«ãããããšãã§ããŸãã
è€éãªããŒã¿åã§ã®äœæ¥
ãžã§ããªã¯ã¹ã¯ãé åããªããžã§ã¯ããã€ã³ã¿ãŒãã§ãŒã¹ãªã©ã®è€éãªããŒã¿åãæ±ãéã«ç¹ã«äŸ¡å€ãçºæ®ããŸããããã€ãã®äžè¬çãªã·ããªãªãèŠãŠãããŸãããïŒ
ãžã§ããªãã¯é å
ãžã§ããªã¯ã¹ã䜿çšããŠãç°ãªãåã®é åãæ±ã颿°ãã¯ã©ã¹ãäœæã§ããŸãïŒ
function arrayToString<T>(arr: T[]): string {
return arr.join(", ");
}
let numberArray: number[] = [1, 2, 3, 4, 5];
let stringArray: string[] = ["apple", "banana", "cherry"];
console.log(arrayToString(numberArray)); // Output: 1, 2, 3, 4, 5
console.log(arrayToString(stringArray)); // Output: apple, banana, cherry
ããã§ã¯ãarrayToString颿°ã¯åT[]ã®é
åãåãåãããã®é
åã®æåå衚çŸãè¿ããŸãããã®é¢æ°ã¯ããããåã®é
åã§åäœãããããéåžžã«åå©çšæ§ãé«ãã§ãã
ãžã§ããªãã¯ãªããžã§ã¯ã
ãžã§ããªã¯ã¹ã¯ãç°ãªã圢ç¶ã®ãªããžã§ã¯ããæ±ã颿°ãã¯ã©ã¹ãå®çŸ©ããããã«ã䜿çšã§ããŸãïŒ
interface Person {
name: string;
age: number;
country: string; // ã°ããŒãã«ãªæèã®ããã«åœã远å
}
interface Product {
id: number;
name: string;
price: number;
currency: string; // ã°ããŒãã«ãªæèã®ããã«é貚ã远å
}
function displayInfo<T extends { name: string }>(item: T): void {
console.log(`Name: ${item.name}`);
}
let person: Person = { name: "Alice", age: 30, country: "USA" };
let product: Product = { id: 1, name: "Laptop", price: 1200, currency: "USD" };
displayInfo(person); // Output: Name: Alice
displayInfo(product); // Output: Name: Laptop
ãã®äŸã§ã¯ãdisplayInfo颿°ã¯ãstringåã®nameããããã£ãæã€å¿
èŠãããåTã®ãªããžã§ã¯ããåãåããŸããextends { name: string }ãšããç¯ã¯å¶çŽã§ãããåãã©ã¡ãŒã¿Tã®æå°èŠä»¶ãæå®ããŸããããã«ããã颿°ãå®å
šã«nameããããã£ã«ã¢ã¯ã»ã¹ã§ããããšãä¿èšŒãããŸãã
ãžã§ããªã¯ã¹ã®é«åºŠãªäœ¿çšæ³
TypeScriptã®ãžã§ããªã¯ã¹ã¯ãããã«æè»ã§åŒ·åãªã³ãŒããäœæã§ããé«åºŠãªæ©èœãæäŸããŸãããããã®æ©èœã®ããã€ããèŠãŠãããŸãããïŒ
è€æ°ã®åãã©ã¡ãŒã¿
è€æ°ã®åãã©ã¡ãŒã¿ãæã€é¢æ°ãã¯ã©ã¹ãå®çŸ©ã§ããŸãïŒ
function merge<T, U>(obj1: T, obj2: U): T & U {
return { ...obj1, ...obj2 };
}
interface Name {
firstName: string;
}
interface Age {
age: number;
}
const person: Name = { firstName: "Bob" };
const details: Age = { age: 42 };
const merged = merge(person, details);
console.log(merged.firstName); // Output: Bob
console.log(merged.age); // Output: 42
merge颿°ã¯ãåTãšUã®2ã€ã®ãªããžã§ã¯ããåãåããäž¡æ¹ã®ãªããžã§ã¯ãã®ããããã£ãå«ãæ°ãããªããžã§ã¯ããè¿ããŸããããã¯ãç°ãªããœãŒã¹ããã®ããŒã¿ãçµã¿åãããããã®åŒ·åãªæ¹æ³ã§ãã
ãžã§ããªãã¯å¶çŽ
åè¿°ã®éããå¶çŽã䜿çšãããšããžã§ããªãã¯åãã©ã¡ãŒã¿ã§äœ¿çšã§ããåãå¶éã§ããŸããããã«ããããžã§ããªãã¯ã³ãŒããæå®ãããåã«å¯ŸããŠå®å šã«æäœã§ããããšãä¿èšŒãããŸãã
interface Lengthwise {
length: number;
}
function loggingIdentity<T extends Lengthwise>(arg: T): T {
console.log(arg.length);
return arg;
}
loggingIdentity([1, 2, 3]); // Output: 3
loggingIdentity("hello"); // Output: 5
// loggingIdentity(123); // Error: Argument of type 'number' is not assignable to parameter of type 'Lengthwise'.
loggingIdentity颿°ã¯ãnumberåã®lengthããããã£ãæã€å¿
èŠãããåTã®åŒæ°ãåãåããŸããããã«ããã颿°ãå®å
šã«lengthããããã£ã«ã¢ã¯ã»ã¹ã§ããããšãä¿èšŒãããŸãã
ãžã§ããªãã¯ã¯ã©ã¹
ãžã§ããªã¯ã¹ã¯ã¯ã©ã¹ã§ã䜿çšã§ããŸãïŒ
class DataStorage<T> {
private data: T[] = [];
addItem(item: T) {
this.data.push(item);
}
removeItem(item: T) {
this.data = this.data.filter(d => d !== item);
}
getItems(): T[] {
return [...this.data];
}
}
const textStorage = new DataStorage<string>();
textStorage.addItem("apple");
textStorage.addItem("banana");
textStorage.removeItem("apple");
console.log(textStorage.getItems()); // Output: [ 'banana' ]
const numberStorage = new DataStorage<number>();
numberStorage.addItem(1);
numberStorage.addItem(2);
numberStorage.removeItem(1);
console.log(numberStorage.getItems()); // Output: [ 2 ]
DataStorageã¯ã©ã¹ã¯ãä»»æã®åTã®ããŒã¿ãæ ŒçŽã§ããŸããããã«ãããåå®å
šãªåå©çšå¯èœãªããŒã¿æ§é ãäœæã§ããŸãã
ãžã§ããªãã¯ã€ã³ã¿ãŒãã§ãŒã¹
ãžã§ããªãã¯ã€ã³ã¿ãŒãã§ãŒã¹ã¯ãç°ãªãåã§åäœããå¥çŽãå®çŸ©ããã®ã«åœ¹ç«ã¡ãŸããäŸãã°ïŒ
interface Result<T, E> {
success: boolean;
data?: T;
error?: E;
}
interface User {
id: number;
username: string;
email: string;
}
interface ErrorMessage {
code: number;
message: string;
}
function fetchUser(id: number): Result<User, ErrorMessage> {
if (id === 1) {
return { success: true, data: { id: 1, username: "john.doe", email: "john.doe@example.com" } };
} else {
return { success: false, error: { code: 404, message: "User not found" } };
}
}
const userResult = fetchUser(1);
if (userResult.success) {
console.log(userResult.data.username);
} else {
console.log(userResult.error.message);
}
Resultã€ã³ã¿ãŒãã§ãŒã¹ã¯ãæäœã®çµæã衚ãããã®ãžã§ããªãã¯ãªæ§é ãå®çŸ©ããŸããåTã®ããŒã¿ãŸãã¯åEã®ãšã©ãŒã®ãããããå«ããããšãã§ããŸããããã¯ãéåææäœã倱æããå¯èœæ§ã®ããæäœãåŠçããããã®äžè¬çãªãã¿ãŒã³ã§ãã
ãŠãŒãã£ãªãã£åãšãžã§ããªã¯ã¹
TypeScriptã¯ããžã§ããªã¯ã¹ãšããŸã飿ºããããã€ãã®çµã¿èŸŒã¿ãŠãŒãã£ãªãã£åãæäŸããŸãããããã®ãŠãŒãã£ãªãã£åã¯ã匷åãªæ¹æ³ã§åã倿ããã³æäœããã®ã«åœ¹ç«ã¡ãŸãã
Partial<T>
Partial<T>ã¯ãåTã®ãã¹ãŠã®ããããã£ããªãã·ã§ãã«ã«ããŸãïŒ
interface Person {
name: string;
age: number;
}
type PartialPerson = Partial<Person>;
const partialPerson: PartialPerson = { name: "Alice" }; // æå¹
Readonly<T>
Readonly<T>ã¯ãåTã®ãã¹ãŠã®ããããã£ãèªã¿åãå°çšã«ããŸãïŒ
interface Person {
name: string;
age: number;
}
type ReadonlyPerson = Readonly<Person>;
const readonlyPerson: ReadonlyPerson = { name: "Bob", age: 42 };
// readonlyPerson.age = 43; // Error: Cannot assign to 'age' because it is a read-only property.
Pick<T, K>
Pick<T, K>ã¯ãåTããããããã£ã®ã»ããKãéžæããŸãïŒ
interface Person {
name: string;
age: number;
email: string;
}
type NameAndAge = Pick<Person, "name" | "age">;
const nameAndAge: NameAndAge = { name: "Charlie", age: 28 };
Omit<T, K>
Omit<T, K>ã¯ãåTããããããã£ã®ã»ããKãåé€ããŸãïŒ
interface Person {
name: string;
age: number;
email: string;
}
type PersonWithoutEmail = Omit<Person, "email">;
const personWithoutEmail: PersonWithoutEmail = { name: "David", age: 35 };
Record<K, T>
Record<K, T>ã¯ãããŒãKã§å€ãåTã®åãäœæããŸãïŒ
type CountryCodes = "US" | "CA" | "UK" | "DE" | "FR" | "JP" | "CN" | "IN" | "BR" | "AU"; // ã°ããŒãã«ãªæèã®ããã«ãªã¹ããæ¡åŒµ
type Currency = "USD" | "CAD" | "GBP" | "EUR" | "JPY" | "CNY" | "INR" | "BRL" | "AUD"; // ã°ããŒãã«ãªæèã®ããã«ãªã¹ããæ¡åŒµ
type CurrencyMap = Record<CountryCodes, Currency>;
const currencyMap: CurrencyMap = {
"US": "USD",
"CA": "CAD",
"UK": "GBP",
"DE": "EUR",
"FR": "EUR",
"JP": "JPY",
"CN": "CNY",
"IN": "INR",
"BR": "BRL",
"AU": "AUD",
};
Mapped Types
Mapped Typesã䜿çšãããšãæ¢åã®åã®ããããã£ãå埩åŠçããããšã§ããã®åã倿ã§ããŸããããã¯ãæ¢åã®åã«åºã¥ããŠæ°ããåãäœæããããã®åŒ·åãªæ¹æ³ã§ããäŸãã°ãå¥ã®åã®ãã¹ãŠã®ããããã£ãèªã¿åãå°çšã«ããåãäœæã§ããŸãïŒ
interface Person {
name: string;
age: number;
}
type ReadonlyPerson = {
readonly [K in keyof Person]: Person[K];
};
const readonlyPerson: ReadonlyPerson = { name: "Eve", age: 25 };
// readonlyPerson.age = 26; // Error: Cannot assign to 'age' because it is a read-only property.
ãã®äŸã§ã¯ã[K in keyof Person]ãPersonã€ã³ã¿ãŒãã§ãŒã¹ã®ãã¹ãŠã®ããŒãå埩åŠçããPerson[K]ãåããããã£ã®åã«ã¢ã¯ã»ã¹ããŸããreadonlyããŒã¯ãŒãã¯åããããã£ãèªã¿åãå°çšã«ããŸãã
æ¡ä»¶ä»ãå
æ¡ä»¶ä»ãåã䜿çšãããšãæ¡ä»¶ã«åºã¥ããŠåãå®çŸ©ã§ããŸããããã¯ãããŸããŸãªã·ããªãªã«é©å¿ããåãäœæããããã®åŒ·åãªæ¹æ³ã§ãã
type NonNullable<T> = T extends null | undefined ? never : T;
type MaybeString = string | null | undefined;
type StringType = NonNullable<MaybeString>; // string
function getValue<T>(value: T): NonNullable<T> {
if (value == null) { // nullãšundefinedã®äž¡æ¹ãåŠç
throw new Error("Value cannot be null or undefined");
}
return value as NonNullable<T>;
}
try {
const validValue = getValue("hello");
console.log(validValue.toUpperCase()); // Output: HELLO
const invalidValue = getValue(null); // ããã¯ãšã©ãŒãã¹ããŒããŸã
console.log(invalidValue); // ãã®è¡ã«ã¯å°éããŸãã
} catch (error: any) {
console.error(error.message); // Output: Value cannot be null or undefined
}
ãã®äŸã§ã¯ãNonNullable<T>åã¯TãnullãŸãã¯undefinedã§ãããã©ããããã§ãã¯ããŸããããããã§ããã°ãåãèš±å¯ãããªãããšãæå³ããneverãè¿ããŸããããã§ãªããã°ãTãè¿ããŸããããã«ãããnullé蚱容ã§ããããšãä¿èšŒãããåãäœæã§ããŸãã
ãžã§ããªã¯ã¹ã䜿çšããããã®ãã¹ããã©ã¯ãã£ã¹
ãžã§ããªã¯ã¹ã䜿çšããéã«å¿ã«çããŠããã¹ããã¹ããã©ã¯ãã£ã¹ãããã€ã玹ä»ããŸãïŒ
- 説æçãªåãã©ã¡ãŒã¿åã䜿çšããïŒ åãã©ã¡ãŒã¿ã®ç®çãæç¢ºã«ç€ºãååãéžã³ãŸãã
- ãžã§ããªãã¯åãã©ã¡ãŒã¿ã§äœ¿çšã§ããåãå¶éããããã«å¶çŽã䜿çšããïŒ ããã«ããããžã§ããªãã¯ã³ãŒããæå®ãããåã«å¯ŸããŠå®å šã«æäœã§ããããšãä¿èšŒãããŸãã
- ãžã§ããªãã¯ã³ãŒããã·ã³ãã«ã§çŠç¹ã®åã£ããã®ã«ä¿ã€ïŒ ããŸãã«ãå€ãã®åãã©ã¡ãŒã¿ãè€éãªå¶çŽã§ãžã§ããªãã¯ã³ãŒããé床ã«è€éã«ããªãã§ãã ããã
- ãžã§ããªãã¯ã³ãŒãã培åºçã«ææžåããïŒ åãã©ã¡ãŒã¿ã®ç®çãšäœ¿çšãããå¶çŽã説æããŸãã
- ã³ãŒãã®åå©çšæ§ãšåå®å šæ§ã®ãã¬ãŒããªããèæ ®ããïŒ ãžã§ããªã¯ã¹ã¯ã³ãŒãã®åå©çšæ§ãåäžãããããšãã§ããŸãããã³ãŒããããè€éã«ããããšããããŸãããžã§ããªã¯ã¹ã䜿çšããåã«ãå©ç¹ã𿬠ç¹ãæ¯èŒæ€èšããŠãã ããã
- ããŒã«ãªãŒãŒã·ã§ã³ãšã°ããŒããªãŒãŒã·ã§ã³ïŒl10nãšg11nïŒãèæ ®ããïŒ ç°ãªãå°åã®ãŠãŒã¶ãŒã«è¡šç€ºããå¿ èŠãããããŒã¿ãæ±ãå Žåããžã§ããªã¯ã¹ãé©åãªãã©ãŒããããæåçæ £ç¿ããµããŒãããŠããããšã確èªããŠãã ãããäŸãã°ãæ°å€ãæ¥ä»ã®ãã©ãŒãããã¯ãã±ãŒã«ã«ãã£ãŠå€§ããç°ãªãå ŽåããããŸãã
ã°ããŒãã«ãªæèã§ã®äŸ
ãžã§ããªã¯ã¹ãã°ããŒãã«ãªæèã§ã©ã®ããã«äœ¿çšã§ããããããã€ãã®äŸãèããŠã¿ãŸãããïŒ
é貚æç®
interface ConversionRate {
rate: number;
fromCurrency: string;
toCurrency: string;
}
function convertCurrency<T extends ConversionRate>(amount: number, rate: T): number {
return amount * rate.rate;
}
const usdToEurRate: ConversionRate = { rate: 0.85, fromCurrency: "USD", toCurrency: "EUR" };
const amountInUSD = 100;
const amountInEUR = convertCurrency(amountInUSD, usdToEurRate);
console.log(`${amountInUSD} USD is equal to ${amountInEUR} EUR`); // Output: 100 USD is equal to 85 EUR
æ¥ä»ã®ãã©ãŒããã
interface DateFormatOptions {
locale: string;
options: Intl.DateTimeFormatOptions;
}
function formatDate<T extends DateFormatOptions>(date: Date, format: T): string {
return date.toLocaleDateString(format.locale, format.options);
}
const currentDate = new Date();
const usDateFormat: DateFormatOptions = { locale: "en-US", options: { year: 'numeric', month: 'long', day: 'numeric' } };
const germanDateFormat: DateFormatOptions = { locale: "de-DE", options: { year: 'numeric', month: 'long', day: 'numeric' } };
const japaneseDateFormat: DateFormatOptions = { locale: "ja-JP", options: { year: 'numeric', month: 'long', day: 'numeric' } };
console.log("US Date: " + formatDate(currentDate, usDateFormat));
console.log("German Date: " + formatDate(currentDate, germanDateFormat));
console.log("Japanese Date: " + formatDate(currentDate, japaneseDateFormat));
翻蚳ãµãŒãã¹
interface Translation {
[key: string]: string; // åçãªèšèªããŒãèš±å¯
}
interface LanguageData<T extends Translation> {
languageCode: string;
translations: T;
}
const englishTranslations: Translation = {
"hello": "Hello",
"goodbye": "Goodbye",
"welcome": "Welcome to our website!"
};
const spanishTranslations: Translation = {
"hello": "Hola",
"goodbye": "Adiós",
"welcome": "¡Bienvenido a nuestro sitio web!"
};
const frenchTranslations: Translation = {
"hello": "Bonjour",
"goodbye": "Au revoir",
"welcome": "Bienvenue sur notre site web !"
};
const languageData: LanguageData<typeof englishTranslations>[] = [
{languageCode: "en", translations: englishTranslations },
{languageCode: "es", translations: spanishTranslations },
{languageCode: "fr", translations: frenchTranslations}
];
function translate<T extends Translation>(key: string, languageCode: string, languageData: LanguageData<T>[]): string {
const lang = languageData.find(lang => lang.languageCode === languageCode);
if (!lang) {
return `Translation for ${key} in ${languageCode} not found.`;
}
return lang.translations[key] || `Translation for ${key} not found.`;
}
console.log(translate("hello", "en", languageData)); // Output: Hello
console.log(translate("hello", "es", languageData)); // Output: Hola
console.log(translate("welcome", "fr", languageData)); // Output: Bienvenue sur notre site web !
console.log(translate("missingKey", "de", languageData)); // Output: Translation for missingKey in de not found.
çµè«
TypeScriptã®ãžã§ããªã¯ã¹ã¯ãè€éãªããŒã¿åãæ±ãããšãã§ãããåå©çšå¯èœã§åå®å šãªã³ãŒããæžãããã®åŒ·åãªããŒã«ã§ãããžã§ããªã¯ã¹ã®åºæ¬æ§æãé«åºŠãªæ©èœããã¹ããã©ã¯ãã£ã¹ãçè§£ããããšã§ãTypeScriptã¢ããªã±ãŒã·ã§ã³ã®å質ãšä¿å®æ§ãå€§å¹ ã«åäžãããããšãã§ããŸããã°ããŒãã«ãªãªãŒãã£ãšã³ã¹åãã®ã¢ããªã±ãŒã·ã§ã³ãéçºããéã«ã¯ããžã§ããªã¯ã¹ã¯å€æ§ãªããŒã¿ãã©ãŒããããæåçæ £ç¿ãæ±ãã®ã«åœ¹ç«ã¡ããã¹ãŠã®äººã«ã·ãŒã ã¬ã¹ãªãŠãŒã¶ãŒäœéšãä¿èšŒããŸãã