[TypeScript] Using Assertion to Convert Types in TypeScript
Sometimes the compiler needs help figuring out a type. In this lesson we learn how to help out the compiler with Typescript type assertion.
We have a SuperHero
and a BadGuy
. Let's make a function that saves the day if the function's argument is a SuperHero
, and a commits a bad deed if its argument is a BadGuy
. Our function needs to accept something that could be a SuperHero
or a BadGuy
.
interface SuperHero { powers: string[]; savesTheDay: () => void; } interface BadGuy { badDeeds: string[]; getRandomBadDeed: () => string; commitBadDeed: () => void; } function saveDayOrBadDeed(something: SuperHero | BadGuy) { if (something.powers) {} }
The IDE is telling us something's wrong.
assertion.ts(24,19): error TS2339: Poperty 'powers' does not exist on type 'SuperHero | BadGuy'.
This is because the compiler is evaluating both types of the union-type argument. Since the BadGuy
doesn't have powers, something doesn't have powers. We can get a hold of the SuperHero
's power's property by asserting that something is a SuperHero
.
An assertion is how we told the compiler, "We have some information about something's type that it doesn't." There are two different syntaxes for assertion. We're using the as
type syntax, which goes behind the value. We're putting something in parens in order to isolate it from its property. If we remove the parens we can't make the assertion.
function saveDayOrBadDeed(something: SuperHero | BadGuy) { if ((something as SuperHero).powers) {} } //or if (<SuperHero>something.powers) {} // angle bracket syntax, doesn't work with JSX
function saveDayOrBadDeed(something: SuperHero | BadGuy) { if ((something as SuperHero).powers) { (something as SuperHero).savesTheDay(); } else { (something as BadGuy).commitBadDeed(); } } saveDayOrBadDeed(dazzler); // Dazzler transduces sonic vibrations into light to save the day!!! saveDayOrBadDeed(badGuy); // BadGuy farts on old folks
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具