Structural Type System vs Nominal Type System

Seulyi Yoo·2022년 7월 14일
0

TypeScript

목록 보기
20/42
post-thumbnail

Structural type system - 구조가 같으면, 같은 타입이다.

Typescript 방식

interface IPerson {
	name: string;
	age: number;
	speak(): string;
}

type PersonType = {
	name: string;
	age: number;
	speak(): string;
};

let personInterface: IPerson = {} as any;
let personType: PersonType = {} as any;

personInterface = personType;
personType = personInterface;

Nominal Type System - 구조가 같아도 이름이 다르면, 다른 타입이다.

C, Java 방식

type PersonID = string & { readonly brand: unique symbol };

function PersonID(id: string): PersonID {
	return id as PersonID; 
}

function getPersonById(id: PersonID) {}

getPersonById(PersonID('id-aaaaaa'));
getPersonById('id-aaaaaa'); 
// error TS 2345: Argument of type 'string' is not assignable to parameter of type 'PersonID'.
// Type 'string' is not assignable to type '{ readonly brand: unique symbol; }'.

duck typing (런타임)

만약 어떤 새가 오리처럼 걷고, 헤엄치고, 꽥꽥거리는 소리를 낸다면 나는 그 새를 오리라고 부를 것이다.

TypeScript 는 duck typing 아님

class Duck:
	def sound(self):
		print u "꽥꽥"

class Dog:
	def sound(self):
		print u "멍멍"

def get_soung(animal):
	animal.sound()

def main():
	bird = Duck()
	dog = Dog()
	getSound(bird)
	getSound(dog)
profile
성장하는 개발자 유슬이 입니다!

0개의 댓글