반응형
문맥적 타입화(contextual typing)
// log(message: string, userName?: string) 함수
type Log = (message: string, userName?: string) => void
let log: Log = ( // ①
message, // ②
userName = '로그인 안했는데염...' // ③
) => { // ④
let time = new Date().toISOString()
console.log(time, message, userName)
}
위의 코드는 함수의 매개변수 타입을 명시하지 않아도 되는 사례입니다.
이미 log의 타입을 Log로 지정했으므로 TypeScript가 message의 타입을 string으로 추론할 수 있기 때문입니다.
이는 문맥적 타입화(contextual typing)라는 TypeScript 강력한 타입 추론 기능입니다.
roses라는 함수를 아래와 같이 선언합니다. 이 함수는 콜백 함수 r을 n번 호출하며, 현재의 인덱스를 r의 인수로 전달합니다.
function roses(
r: (index: number) => void,
n: number
){
for(let i = 0; i < n; i++){
r(i)
}
}
roses를 호출할 때 함수 선언을 인라인으로 제공하면 인수로 전달하는 함수의 타입을 명시할 필요가 없습니다.
roses(n => console.log(n), 4)
roses의 시그니처에서 r의 인수 index를 number로 선언했으므로 TypeScript는 문맥상 n이 number임을 추론할 수 있습니다.
r을 인라인으로 선언하지 않으면 TypeScript는 타입을 추론할 수 없습니다.
function r(n){ // error TS7006: 매개변수 'n'의 타입은 암묵적으로 'any' 타입
console.log(n)
}
roses(r, 4)
반응형
'👶 TypeScript' 카테고리의 다른 글
다형성 (0) | 2023.01.12 |
---|---|
오버로드된 함수 타입 (0) | 2023.01.12 |
호출 시그니처 (0) | 2023.01.12 |
반복자 (0) | 2023.01.11 |
제너레이터 함수 (0) | 2023.01.11 |