230120 TIL

고먐미·2023년 1월 20일
0

TypeScript

Interface

  • type alias 의 객체 전용 버전
  • 하지만 type alias 와 다르게 확장이 가능하다. (type alias 는 불가능)
  • 옵셔널 파라미터 역시 사용 가능

예시

interface Person {
  name : string;
  age : number;
}
const person1 : Person = {name:'js', age:20}
const person2 : Person = {name:'js', age:'twenty'} //error - age는 number로 선언되어있다.

read only 속성

  • interface 로 객체를 처음 선언시에만 할당이 가능하고, 그 후에는 변경이 불가능한 속성

예시

interface Person {
  readonly name : string;
  age? : number;
}
const person1 : Person = {name:'js'}
person1.name = 'ljs' // error - Person 의 name 은 readonly 속성이기 때문에 값을 변경할 수 없다.

예시2

let readOnlyArr = ReadonlyArr<number> = [1,2,3]
readOnlyArr.push(4); //error - readOnlyArr 은 readonly 속성이기 때문에 값을 추가할 수 없다.

index 타입

  • interface 에서 속성의 이름을 제대로 정의하지 않고, 어떤 값의 타입만 정의하는 것
  • index의 key는 string 이나 number 만 들어올 수 있음

예시

interface Person {
  name : string;
  [key: string] : string : number; // [key:string]은 key값에 어떤 string 값도 올 수 있다는 의미.
}
const p1:Person = {name:'js', birthday:'secret', age:20}

함수 타입

  • interface 로 함수 파라미터와 반환값의 타입을 지정해줄 수 있다.

예시

interface Print {
  (name:string, age:number):string;
}
const getNameAndAge : Print = function (name,age) {
  return `name: ${name}, age: ${age}`;
};

interface 확장

  • extends 를 이용해 interface 로 선언한 것을 확장시킬 수 있다.

예시1

interface Person {
  name : string;
  age : number;
}
interface Korean extends Person {
  birth: "KOR";
}
// 이 때, Korean 은 아래와 같다.
interface Korean {
  name : string;
  age : number;
  birth: "KOR";
}

예시2
interface는 여러개를 확장시킬 수 있다.
예시1 아래에 코드를 더 작성한다고 가정했을 때,

interface Developer {
  job: 'developer';
}
interface KorAndDev extends Korean, Developer {}
// 이 때, KorAndDev 는 아래와 닽다.
interface KorAndDev {
  name : string;
  age : number;
  birth: "KOR";
  job: "developer"
}

intersection 타입

  • interface 타입들을 합쳐서 만들 수 있는 타입

예시

interface Person {
  name : string;
  age : number;
}
interface Developer {
  name: "string";
  skill: "string"
}
type DevJob = Person & Developer;
// 이 때, DevJob을 가진 오브젝트를 만들어보면...
cosnt nbcPerson: DevJob {
  name: "a",
  age: 20,
  skill: "ts"
}
profile
개념을 이해하고 다른사람에게도 알려줄 수 있는 개발자가 되고 싶어요..

0개의 댓글