[ TS ] 객체와 타입

유기훈·2022년 6월 23일
0
post-thumbnail

타입 주석

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으로 판단

any 타입

타입과 무관하게 어떤 종류의 값도 저장할 수 있습니다.

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
profile
개발할 수 있어 감사하다

0개의 댓글