✨ 선언 파일 타입 선언은 파일 이름이 .d.ts확장자로 끝나는 선언 파일에 작성됩니다. .d.ts 파일에는 사용 가능한 런타임 값, 인터페이스, 모듈, 일반적인 타입 설명만 포함됩니다. 선언 파일은 값이 아닌 타입만 선언할 수 있는 코드 영역을 의미하는 앰비언트 컨텍스트를 생성합니다. ✨ 런타임 값 선언 declare 키워드를 사용해 구조체가 존재한다고 선언할 수 있습니다. 이는 script 태그 같이 외부 작업을 통해 가져온 구조체에 특정 타입의 값을 생성할 수 있습니다. 함수와 클래스도 일반적인 형식과 유사하게 선언되지만, 본문이 없습니다. declare function get() { // ... } // ERROR An implementation cannot be declared in ambien..
제네릭을 통해 호출하는 방식에 따라 다양한 타입으로 작동하도록 의도할 수 있습니다. ✨ 제네릭 함수 function identity(input: T){ return input } const identity2 = (input: T) => input; 화살표 함수의 제네릭은 .tsx 파일에서 JSX 구문과 충돌합니다. 명시적 제네릭 호출 타입 function logWrapper(callback: (input: Input) => void) { return (input: Input) => { console.log("Input:", input); callback(input) } } logWrapper((input: string) => { console.log(input.length); }) logWrapper((..
✨ top 타입 top 타입은 시스템에서 가능한 모든 값을 나타내는 타입입니다. any any 타입은 top 타입처럼 작동할 수 있지만, 타입 검사를 수행하지 않도록 명시적으로 지시합니다. 즉 타입 오류를 보고하지 않습니다. let anyValue: any; anyValue = "ABC" // OK anyValue = 123 // OK function greet(name: any){ console.log(`hi ${name.toUpperCase()}!`) } greet({name: "ABC"}) // OK unknown unknown 타입은 진정한 top타입 입니다. 타입의 값을 제한적으로 취급합니다. function greet(name: unknown){ console.log(`hi ${name.toU..
✨ 클래스 확장 클래스 역시 extends 키워드를 사용하여 확장할 수 있습니다. class Teacher { teach() { console.log("teach") } } class StudentTeacher extends Teacher { learn() { console.log("learn") } } 할당 가능성 확장 파생된 인스턴스는 기본 클래스 또는 하위 클래스를 충족하는데 사용할 수 있습니다. class Lesson { subject: string constructor(subject: string){ this.subject = subject; } } class OnlineLesson extends Lesson { url: string; constructor(subject: string, url:..
✨ 클래스 메서드 class Greeter { message: string constructor(message: string){ this.message = message; } greet(name: string){ console.log(`${this.message} ${name}`) } } new Greeter("hi").greet("Jack") // OK new Greeter().greet("Jack") // ERROR Expected 1 arguments, but got 0. new Greeter("hi").greet() // ERROR Expected 1 arguments, but got 0. ✨ 클래스 속성 클래스 속성을 읽거나 쓰려면 명시적으로 선언해야 합니다. 인스턴스에 존재하지 않는 멤버에 접..
✨타입 별칭 vs 인터페이스 인터페이스는 병합(merge)할 수 있습니다. 내장된 전역 인터페이스 혹은 외부 코드를 사용할 때 유용합니다. 인터페이스는 클래스가 선언된 구조의 타입을 확인하는 데 사용할 수 있지만, 타입 별칭은 그럴 수 없습니다. 일반적으로 인터페이스가 더 빨리 작동합니다. ✨속성 타입 선택적 속성 interface Poet{ born?: number; // ? 키워드로 선택적 속성 사용 name: string; }; 읽기 전용 속성 interface Poet{ readonly born: number; // readonly 키워드를 이용하여 다른 값으로 설정할 수 없음을 나타냅니다. name: string; }; const poet: Poet = { born: 1980, name: "AB..