環境
- TypeScript v5
引数のオブジェクトを Record<string, unknown>
とするパターン
返り値に as
を使わないとタイプエラーになる
返り値 Entries を定義するパターン
type Entries<T> = (keyof T extends infer U ? U extends keyof T ? [U, T[U]] : unknown : unknown)[]; export const strictEntries = <T extends Record<string, unknown>>( object: T, ): Entries<T> => { return Object.entries(object) as Entries<T>; };
return Object.entries(object) as Entries<T>;
にしないと type error になる
返り値を [keyof T, T[keyof T]][]
とするパターン
export const strictEntries = <T extends Record<string, unknown>>( object: T, ): [keyof T, T[keyof T]][] => { return Object.entries(object) as [keyof T, T[keyof T]][]; };
return Object.entries(object) as [keyof T, T[keyof T]][];
にしないと type error になる
オブジェクトを Record<string, any>
にすれば返り値を [keyof T, T[keyof T]][]
にすれば as
を使わなくても良い
export const strictEntries = <T extends Record<string, any>>( object: T, ): [keyof T, T[keyof T]][] => { return Object.entries(object); };
これなら type error にならない
詳しい挙動は調べてないが、どちらでもいい感じに形推論されるようになったからヨシ
おわり
[参考]