Skip to content

Instantly share code, notes, and snippets.

@mmitou
Created July 12, 2022 09:41
Show Gist options
  • Select an option

  • Save mmitou/2ffc8ce6660be61a48747ff31b5a3b3c to your computer and use it in GitHub Desktop.

Select an option

Save mmitou/2ffc8ce6660be61a48747ff31b5a3b3c to your computer and use it in GitHub Desktop.
型の違う関数をキーで呼び分けたい時の処理
const ErrorMessageTemplate = {
ElementNotFoundError({ elementId }: { elementId: string }) {
return `element not found: elementId=${elementId}`;
},
UserNotFoundError({ userId }: { userId: string }) {
return `user not found: userId=${userId}`;
},
};
export class AppError<
K extends keyof typeof ErrorMessageTemplate
> extends Error {
constructor(
public readonly functionName: string,
public readonly name: K,
public readonly value: Parameters<typeof ErrorMessageTemplate[K]>[0],
public readonly cause?: Error
) {
const template = ErrorMessageTemplate[name] as (
arg: Parameters<typeof ErrorMessageTemplate[K]>[0]
) => string;
super(template(value));
}
}
@mmitou
Copy link
Copy Markdown
Author

mmitou commented Jul 12, 2022

genericsだけで全部解決しようとしたが出来なかった。
関数内でキャストして問題を回避した。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment