const fn = (a: number, b: string, c: boolean): { a: number; b: string; c: boolean } => {
return { a, b, c }
}
という関数があって JavaScript でいうこういうことをしたいとき
const fnw = (...args) => {
console.log(args)
return fn(...args)
}
引数と返り値をそのまま返してるのですが TypeScript だと fnw の関数にも型を書かないといけないです
複雑な型定義だと毎回書くのが面倒です
完全に引数と返り値が一致しているのなら typeof を左辺に書くことで解決できます
const fnw: typeof fn = (...args) => {
console.log(args)
return fn(...args)
}
fnw(1, "a", false)
返り値が異なるなど変更するところがあれば関数の型をその場で作ります
const fn = (a: number, b: string, c: boolean): { a: number; b: string; c: boolean } => {
return { a, b, c }
}
const fnw: (...args: Parameters<typeof fn>) => void =
(...args) => {
fn(...args)
}
返り値を推論に任せるなら引数のみ指定ですが この場合は右辺側に書くことになります
const fnw = (...args: Parameters<typeof fn>) => {
fn(...args)
}
この場合は ...args とまとめて受け取らないとダメです
分けようとすると 1 つ 1 つ Parameters<typeof fn>[0] のように書く事になって面倒です
別々に受け取りたい場合でも ...args にして関数内で
const [a, b, c] = args
で展開するほうが楽そうです