기본적으로 타입스크립트 Language server에 의해 타입이 추론되게 됩니다
이미지와 같이 test 변수에서 어떤 타입을 return 해주는지 자동으로 보여줍니다.
test(123)
실행시 타입 에러가 발생한다.test
함수는 타입이 String
인 text
파라미터를 가지고 있습니다.'text'
가 사용됩니다. 그리고 아무런 동작없이 파라미터를 그대로 return 하기 때문에 return값을 String
타입으로 추론하게 됩니다.// return 값이 string으로 고정되기 때문에 Number값을 전달해도 에러가 발생하지 않는다
const test = (text = 'text') => {
return String(text)
}
제네릭에 전달한 타입 값으로 타입을 추론하여 사용하는 것이 기본 개념입니다.
interface Dropdown<T> {
value:T;
title:string;
}
interface DetailedDropdown<K> extends Dropdown<K> {
description:string;
tag:K;
}
// 예시
const test:DetailedDropdown<string> = {
description:string;
tag:string;
value:string;
title:string;
}
extends에 의해 확장되어 Dropdown의 전달된 K도 DetailedDropdown에 전달한 타입으로 추론됩니다.
타입을 추론할 때 number 일수도 있고? string 일수도 있고?
이럴 경우에는 가장 근접한 타입을 추론해서 그 값들을 표현해줍니다.
위에 배열 안에 값으로 number타입과 null 타입이 있는 걸 알 수 있고 가장 근접한 타입을 추론해서 (number | null)[]
타입이라고 명시해주고 있습니다.
타입스크립트에서 타입을 추론하는 또 하나의 방식은 바로 코드의 위치(문맥)로 타입을 결정하는 것입니다.
window.onmousedown = function(mouseEvent) {
console.log(mouseEvent.button); //<- OK
console.log(mouseEvent.studyveryhard); //<- Error!
};
window.onmousedown
에 할당되는 함수의 타입을 추론하기 위해 window.onmousedown
타입을 검사합니다. MouseEvent
와 연관이 있다고 추론하기 때문에 mouseEvent 인자에 button 속성은 있지만 studyveryhard 속성은 없다고 결론을 내립니다.MouseEvent
타입으로 추론을 하는 이유는 onmousedown에 설정된 타입을 보면 알 수 있습니다.문맥상 판단하기 때문에 아래 onscroll 메소드에서는 에러가 발생합니다.
// uiEvent로 타입을 판단하기 때문에 에러가 발생한다.
window.onscroll = function (uiEvent) {
console.log(uiEvent.button); //<- Error!
}
타입스크립트(Language Server) 서버는 통합 개발 환경(IDE) 같은 클라이언트 도구들에게 타입스크립트 코드의 분석, 오류 검출 및 리팩토링과 같은 기능을 제공합니다.
Language Server는 여러 언어와 툴이 상호 작용할 수 있도록 설계된 표준화된 인터페이스인 Language Server Protocol(LSP)를 구현합니다.
LSP는 클라이언트와 서버 간의 통신을 위한 명세로, 언어 서버는 LSP를 따라 구현함으로써 여러 클라이언트에서 동일한 언어 서버를 사용할 수 있게 됩니다.
Language Server의 장점은 클라이언트와 서버 간의 표준화된 프로토콜을 사용하여 다양한 개발 환경에서 동일한 언어 서버를 사용할 수 있게 해줍니다. 따라서 여러 편집 툴에서 동일한 언어 서버를 사용하여 일관된 개발 경험을 제공할 수 있습니다.