[Typescript] Combine Branded type with type predicates
import { it } from 'vitest';
import { Brand } from '../helpers/Brand';
type Valid<T> = Brand<T, 'Valid'>;
interface PasswordValues {
password: string;
confirmPassword: string;
}
/**
* 💡 You'll need to change this function...
*/
const isValidPassword = (
values: PasswordValues
): values is Valid<PasswordValues> => {
if (values.password !== values.confirmPassword) {
return false;
}
return true;
};
const createUserOnApi = (values: Valid<PasswordValues>) => {
// Imagine this function creates the user on the API
};
it('Should fail if you do not validate the values before calling createUserOnApi', () => {
const onSubmitHandler = (values: PasswordValues) => {
// @ts-expect-error
createUserOnApi(values);
};
});
it('Should succeed if you DO validate the values before calling createUserOnApi', () => {
const onSubmitHandler = (values: PasswordValues) => {
if (isValidPassword(values)) {
createUserOnApi(values);
}
};
});
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2021-02-10 [Typescript] Create Type From Any Given Data in TypeScript
2021-02-10 [Typescript] Ignore Null or Undefined Values with TypeScript Non-Null Assertion Operator
2020-02-10 [Algorithm] 226. Invert Binary Tree
2020-02-10 [Unit Testing] Jasmine Spies
2019-02-10 [HTML5] Build Flexible HTML with HTMLTemplates using Slots and Web Components
2017-02-10 [Typescript] What is a Function Type ? Function Types and Interfaces - Are They Related ?