Тип без пароля не помешал отправить пароль в аналитику
type User = { id: number; email: string; password: string };
type PublicUser = Omit<User, "password">;
function trackSignup(user: PublicUser) {
analytics.send("signup", { ...user });
}
const user: User = await registerForm.submit();
trackSignup(user);
В событиях аналитики обнаружились пароли. Почему тип PublicUser не защитил?
- Типы стираются при компиляции: объект передан целиком, с паролем
- Omit работает только с интерфейсами, а не с type
- Spread-оператор возвращает поля, удалённые через Omit
- Компилятор должен был запретить передачу User, это баг TypeScript
