- 구조적 타이핑이란 오직 멤버만으로 타입을 관계시키는 방식이다.
- 즉, 두 객체 타입 사이에 어떤 관계가 선언되거나 한적이 없음에도 정상적으로 두 타입의 멤버가 같다면, 같은 타입으로 인식한다는 것이다.
- 즉, ‘구조적으로' 타입이 맞기만 한다면 이를 허용해준다.
- 다른 언어는 명목적 타이핑을 이용하는 것과 매우 대조된다.
- 이는 타입스크립트가 결국 자바스크립트의 덕타이핑이라는 성질을 활용해서 구조적타이핑으로 구현된 것임을 알 수 있다.
- 구조적 타이핑은 유닛테스트에 유리하다.
- 왜? DB 라는 추상적인 interface 를 만들고, 상속이 아닌 구조적 타이핑으로 다양한 DB 에 대한 테스트 처리를 진행 할 수 있다.
interface Author {
first: string;
last: string;
}
interface DB {
runQuery: (sql: string) => any[];
}
function getauthors(database: DB): Author[] {
const authorRows = database.runQuery(`SELECT FIRST, LAST FROM AUTHORS`);
return authorRows.map(row => ({ firstName: row[0], last: row[1] });
}
test('getAuthors', () => {
const authors = getAuthors({
runQuery(sql: string) {
return [['Toni', 'Morrison'], ['Maya', 'Angelou']];
}
});
expect(authors).toEqual([
{first: 'Toni', last: 'Morrison'},
{first: 'Maya', last: 'Angelou'}
]);
});