Typescript

Haechan Kim·2022년 4월 8일
0

NestJs

목록 보기
9/19
  • 변수 선언

[선언키워드][변수명]: [타입]
const name: string

  • 객체 타입

속성(property) 갖고 있는 데이터 컬렉션.
c의 구조체와 유사
속성은 키와 값으로 표현되는데 값은 다시 js의 타입을 갖고있음

const kim = {
  name: 'gildong',
  age: 20,
  hobby: ['movie', 'billiards'],
}
  • 함수 타입

ts에는 특수한 타입 존재.

any: js와 같이 어떤 타입의 값도 받을 수 있는 타입.
any 타입의 객체는 어떤 타입의 변수에도 할당 가능.
이때문에 런타임 오류 일으킬 가능성 존재.

unknown: any처럼 어떤 타입도 할당 가능하지만, unknown 타입으로 선언된 변수에는 any 제외한 다른 타입으로 선언된 변수에 할당될 수 없다.

let variable: unknown

variable = true // boolean
variable = 1 // number
variable = 'string' // string
variable = {} // object
let variable: unknown

let anyType: any = variable
let booleanType: boolean = variable // error.
let numberType: number = variable // error.

unknown 타입으로 선언된 변수는 프로퍼티에 접근할 수 없으며, 메소드 호출할 수 없으며, 인스턴스 생성할 수 없다. 알려지지 않은 타입이기 때문.

let variable: unknown

// 모두 error
variable.foo.bar
variable[0]
variable.trigger()
variable()
new Variable()

never: never 타입의 변수에는 어떤 값도 할당 못함. 함수 리턴타입을 never로 지정하면 함수가 어떤 값도 반환하지 않는다는 뜻.

  • 타입 정의하기
    위의 타입들을 조합하여 타입에 이름을 붙여 사용
    변수에 객체 바로 할당하지 않고 interface나 class로 정의할 수 있음
// interface
interface User {
  name: string;
  age: numner;
}

const user: User = {
  name: 'kim',
  age: 20,
}

// class
class User {
  constructor(name: string, age: number) {}
}

const user: User = new User('kim', 20);
  • 제네릭(generic) 타입
    어떤 타입이든 정의될 수 있지만 호출되는 시점에 타입 결정됨.
// 반환값이 any이기 때문에 arg에 string값 전달해도 반환 시 any가 됨.
function indentify(arg: any):any {
  return arg;
}

// 제네릭 타입 사용하면 리턴되는 값의 타입은 함수 호출하는 시점의 인자로 넣은 타입으로 결정되도록 함.
function indentify<T>(arg: T): T {
  return arg;
}

0개의 댓글