러닝 타입스크립트를 읽고 요약한 내용입니다.
function singTwo(first: string, second: string) {
console.log(`${first} / ${second}`);
}
singTwo("Ball and Chain"); // Expected 2 arguments, but got 1.
singTwo("Ball and Chain", "Higher Love");
singTwo("Ball and Chain", "Higher Love", "Dreams"); // Expected 2 arguments, but got 3.
undefined
가 기본값으로 설정됩니다. 물론 undefined
값을 위해 의도적으로 사용할 수도 있습니다. 타입 애너테이션 :
앞에 ?
를 추가하면 매개변수가 선택적이라는 것으로 지정할 수 있습니다. 유니언 타입 매개변수와는 다릅니다. 유니언 매개변수는 undefined
일지라도 명시적으로 항상 제공되어야 합니다.function announceSongBy(song: string, singer: string | undefined) {
console.log('test');
}
announceSongBy('Greensleeves'); // Expected 2 arguments, but got 1.
announceSongBy('Greensleeves', undefined);
announceSongBy('Greensleeves', 'Sia');
=
와 같이 기본값을 포함할 수 있습니다. 선택적 매개변수에는 기본적으로 값이 제공되기 때문에 해당 타입스크립트 타입에는 암묵적으로 함수 내부에 | undefined
유니언 타입이 추가됩니다. 타입 스크립트의 타입 추론은 초기 변숫값과 마찬가지로 기본 함수 매개변수에 대해서도 유사하게 작동합니다. 매개변수에 기본값이 있고 타입 애너테이션이 없는 경우, 해당 기본값을 기반으로 타입을 유추합니다.function rateSong(song: string, rating = 0) {
console.log(`${song} gets ${rating}/5 stars!`);
}
rateSong("Photograph");
rateSong("Set Fire to tje Rain", 5);
rateSong("Set Fire to tje Rain", undefined);
rateSong("At Last!", "100");
// Argument of type 'string' is not assignable to parameter of type 'number'.
function singAllTheSongs(singer: string, ...songs: string[]) {
for(const song of songs) {
console.log(`${song}, by ${singer}`);
}
}
singAllTheSongs("Alicia Keys");
singAllTheSongs("Lady Gaga", "Bad Romance", "Just Dance", "Poker Face");
singAllTheSongs("Ella Fitzgerald", 2000);
// Argument of type 'number' is not assignable to parameter of type 'string'.
)
다음에 배치됩니다.function getSongRecordingDate(song: string): Date | undefined {
switch(song) {
case "Strange Fruit":
return new Date('April 20, 1999'); // Ok
case "Greensleeves";
return "unknown";
// Type 'string' is not assignable to type 'Date'.
default:
return undefined;
}
}
// 타입은 string | undefined 유니언을 반환하는 함수
let returnsStringOrUndefined: () => string | undefined;
// 타입은 undefined나 string을 반환하는 함수
let maybeReturnsString: (() => string) | undefined;
let singer: (song: string) => string;
singer = function (song) {
// song: string의 타입
return `Singing: ${song.toUpperCase()}!`; // Ok
}
type StringToNumber = (input: string) => number;
let StringToNumber: StringToNumber;
StringToNumber = (input) => input.length;
StringToNumber = (input) => input.toUpperCase();
// Type 'string' is not assignable to type 'number'.
void
반환 타입void
인 함수는 값 반환을 허용하지 않습니다.function logSing(song: string | undefined): void {
if(!song) {
return;
}
return true; // Type 'boolean' is not assignable to type 'void'.
}
undefined
를 반환하지만, void
는 함수의 반환 타입이 무시된다는 것을 의미하고 undefined
는 반환되는 리터럴 값입니다. undefined
와 void
를 구분해서 사용하면 매우 유용합니다.function returnVoid() {
return;
}
let laztValue: string | undefined;
laztValue = returnVoid();
// Type 'void' is not assignable to type 'string | undefined'.
never
반환 타입 - never
반환 함수는 (의도적으로) 항상 오류를 발생시키거나 무한 루프를 실행하는 함수입니다. never
키워드와 never
타입은 프로그래밍 언어에서 bottom 타입 또는 empty 타입을 뜻합니다. bottom 타입은 값을 가질 수 없고 참조할 수 없는 타입이므로 bottom 타입에 그 어떠한 타입도 제공할 수 없습니다. never
와 void
와는 다릅니다. void
는 아무 것도 반환하지 않는 함수를 위한 것이고, never
는 절대 반환하지 않는 함수를 위한 것입니다.