TypeScript는 타입을 명시할 수 있습니다. 이를 타입 주석(type annotation)이라고 합니다.
선언한 변숫값은 타입 주석으로 명시한 타입에 해당하는 값으로만 바꿀 수 있습니다.
let a: number = 3
let b: string = 'hello'
타입 주석 부분을 생략하면 타입스크립트 컴파일러는 할당한 값에 따라 변수의 타입을 지정합니다.
마찬가지로 타입에 해당하는 값으로만 바꿀 수 있습니다.
let a = 1 // a의 타입을 number로 판단
let b = true // b의 타입을 boolean으로 판단
let c = 'hi' // c의 타입을 string으로 판단
타입과 무관하게 어떤 종류의 값도 저장할 수 있습니다.
let a: any = 0
타입스크립트는 객체의 타입을 정의할 수 있게 하는 interface 키워드를 제공합니다. 인터페이스는 객체의 타입을 정의하는 것이 목적이므로 객체를 의미하는 중괄호{}로 속성의 이름과 타입을 나열하는 형태로 사용합니다. interface 객체를 사용하는 객체는 interface 속성을 모두 갖고 있어야 합니다.
interface tree {
name: string
age: number
}
속성이 있어도 되고 없어도 되는 형태로 만들고 싶을 때는 선택 속성을 사용해야 합니다. 선택 속성은 속성 이름 뒤에 물음표 기호를 붙여서 만듭니다.
interface tree {
name: string
age: number
bell?: string
}
클래스 선언은 c++ JAVA와 같습니다. 타입스크립트 클래스에서 생성자는 constructor를 사용합니다.
class tree {
constructor(public name: string, public age?: number){}
}
let baobab : tree = new tree('baobab', 87)
console.log(baobab) // tree { name: 'baobab', age: 87 }
다른 객체지향 언어와 마찬가지로 타입스크립트 클래스는 인터페이스를 구현할 수 있습니다. 클래스가 인터페이스를 구현할 때는 다음처럼 implements 키워드를 사용합니다.
interface tree {
name: string
age?: number
}
class tree2 implements tree{
name: string
age: number
}
타입스크립트는 다른 객체지향 언어와 마찬가지로 추상 클래스를 만들 수 있습니다. 추상 클래스는 abstract 키워드를 calss 앞에 붙여서 만듭니다.
abstract class abstractTree {
abstract name: string
constructor(public age?: number){}
}
class tree extends abstractTree{
constructor(public name: string, age?:number){
super(age)
}
}
let baobab : tree = new tree('baobab', 87)
console.log(baobab) // tree { name: 'baobab', age: 87 }
자바스크립트와 타입스크립트는 점을 연이어 3개를 사용하는 ...연산자를 제공합니다. 나머지 속성을 할당할 때 사용합니다.
let student: any = {
school: 'Sejong univ'
department: 'computer science'
city: 'seoul'
id: '00000'
age: '24'
}
const {school, department, ...detail} = student
console.log(detail)
/*
출력
{ city: 'seoul'
id: '00000'
age: '24' }
*/
let student: object = {name: "peter", age: 22};
(<{name: string}>student).name
interface INameable{
name: string
};
let obj: object = {name: 'peter'}
let name1 = (<INameable>obj).name
let name2 = (abj as INameable).name
console.log(name1, name2) // peter peter