지금까지, TypeScript에어떤 person이나 date가 있는지 말하지 않았다. person은 string이고, date는 Date 객체가 될 수 있다는 것을 타입스크립트로 말할수 있도록 코드를 고쳐보자. date에 있는 toDateString()메소드를 사용할 것이다.
function greet(person:string, date: Date) {
console.log(`Hello ${person}, today is ${date.toDateString()}!`);
}
greet가 호출할 수 있는 값의 타입이 무엇인지 묘사하기 위해 person과 date에 타입 어노테이션을 추가했다. 이걸 이렇게 읽을 수 있다 "greet는 string 타입의 person을, Date 타입의 date를 받을 수 있다".
이것과 함께, 타입스크립트는 greet가 부정확하게 호출된 경우에 말해줄 수 있다. 예를 들면...
function greet(person: string, date: Date) {
console.log(`Hello ${person}, today is ${date.toDateString()}!`);
}
greet("Maddison", Date());
// Argument of type 'string' is not assignable to parameter of type 'Date'.
// 'string'타입 아규먼트는 'Date'타입 파라미터에 할당할 수 없다.
허? 타입스크립트가 두번째 아규먼트에 대해 에러를 리포트했다. 왜 그럴까?
아마도 놀랍게도, 자바스크립트에서 Date()를 호출하는 것은 string을 리턴한다. 반면에, new Date()로 Date를 생성하는 것은 실제로 우리가 기대했던 것을 준다.
어쩃든, 에러를 빠르게 고칠 수 있다:
function greet(person: string, date: Date) {
console.log(`Hello ${person}, today is ${date.toDateString()}!`);
}
greet("Maddison", new Date());
명시적인 타입 애노테이션을 항상 써야할 필요는 없다. 많은 경우, 타입스크립트는 생략하더라도 타입을 infer(또는 "figure out")할 수 있다.
let msg = "hello there!";
// msg: string
타입스크립트에 msg가 string 타입을 가진다고 말해주지 않아도, 생각해 줄 수 있다. 이런 기능이 있고, 타입시스템이 같은 타입을 추론하게 될 때 애노테이션을 추가하지 않는 것이 가장 좋다.
'front > ts' 카테고리의 다른 글
Type Narrowing (0) | 2022.07.18 |
---|---|
[The Basics] Erased Types (0) | 2022.05.16 |
[The Basics] Emitting with Errors (0) | 2022.05.16 |
[The Basics] tsc, the TypeScript compiler (0) | 2022.05.13 |
[The Basics] Non-exception Failures (0) | 2022.05.13 |
댓글