let user: object;

user = {
  name: "xx",
  age: 30,
};

console.log(user.name); // Property 'name' does not exist on type 'object' -err

object의 경우 특정 속성값을 나타내지 못한다.



interface의 사용

interface User {
  name: string;
  age: number;
  gender?: string;
  readonly birthYear: number;
  [grade: number]: string;
}

let user: User = {
  name: "xx",
  age: 30,
  birthYear: 2000,
  1: "A",
  2: "B",
};

user.age = 10;
user.gender = "male";
user.birthYear = 1990; // Cannot assign to 'birthYear' because it is a read-only property

console.log(user.age); // 30
console.log(user.gender); // male


?


gender는 입력을 해도되고 안해도 되는 optional한 property.



readonly


readonly를 key 값 앞에 붙이면 수정 불가능.



index signature(인덱스 서명)


[grade:number] : string;

number을 key로 하고 string을 value로 하는 property를 여러개 만들 수 있다.



Literal Type


문자열과 숫자 사용 가능.

type Score = 'A' | 'B' | 'C' | 'F',

interface User {
    [grade:number] : Score;
}

number을 key로 하고 Score을 value로 하는 property.



함수


interface Add {
  (num1: number, num2: number): number;
}

const add: Add = function (x, y) {
  return x + y;
};

interface IsAdult {
  (age: number): boolean;
}

const a: IsAdult = (age) => {
  return age > 10;
};


class

implements


interface Car {
  color: string;
  wheels: number;
  start(): void;
}

class Bmw implements Car {
  color;
  wheels = 4;
  constructor(c: string) {
    this.color = c;
  }
  start() {
    console.log("go...");
  }
}

const b = new Bmw("green");
console.log(b);
// Bmw: {
// "wheels": 4,
// "color": "green"
// }
b.start(); // "go..."


extends


interface Car {
	color: string;
	wheels: number;
	start(): void;
}

class Benz extends Car {
	door: number;
	stop(): void;
}

const benz : Benz = {
	door: 5,
	wheels : 4;
	color : "black"
	start(){
		console.log('go...')
	}
	stop(){
		console.log('stop!')
	}

}
interface Car {
  color: string;
  wheels: number;
}

interface Toy {
  name: string;
}

interface ToyCar extends Car, Toy {
  price: number;
}

댓글남기기