Open2
TS Tips
ピン留めされたアイテム

Type Scriptの小さい実装テクニックまとめ

型を直接渡さずに実装から型を抽出する
例えばこのような関数の実装があった場合
getPermittedActions.ts
/** ユーザー種別 */
type UserCategory = "premium" | "standard" | "non-profit";
/** 実行可能な行動 */
type PermittedActions = {
removeAd: boolean;
changeUserId: boolean;
};
/** ユーザーの種別から実行可能な行動を取得する関数 */
export const getPermittedActions:PermittedActions = (byUserCategory: UserCategory) => ({
removeAd: byUserCategory === 'premium',
changeUserId: byUserCategory === 'premium' || byUserCategory === 'non-profit'
});
このように型をexportするのではなく
getPermittedActions.ts
/** ユーザー種別 */
- type UserCategory = "premium" | "standard" | "non-profit";
+ export type UserCategory = "premium" | "standard" | "non-profit";
/** 実行可能な行動 */
- type PermittedActions = {
+ type PermittedActions = {
removeAd: boolean;
changeUserId: boolean;
};
/** ユーザーの種別から実行可能な行動を取得する関数 */
export const getPermittedActions:PermittedActions = (byUserCategory: UserCategory) => ({
removeAd: byUserCategory === 'premium',
changeUserId: byUserCategory === 'premium' || byUserCategory === 'non-profit'
});
利用側で関数から型を抽出する。
import { getPermittedActions } from "./getPermittedActions"
type UserCategory = Parameters<typeof getPermittedActions>[0];
type PermittedActions = ReturnType<typeof getPermittedActions>;