新闻详情

新闻详情

首页 / 资讯中心 / 详情

type-challenges 入门第一题 Hello World:用类型系统本身完成断言

发布时间:2026/9/30 8:13:59来源:尧图网络
type-challenges 入门第一题 Hello World:用类型系统本身完成断言
示例工程【免费下载链接】type-challengesCollection of TypeScript type challenges with online judge项目地址https://gitcode.com/GitHub_Trending/ty/type-challenges点击查看免费下载Hello World 是 type-challenges 题库的 warm-up 开篇题目它的核心任务是在不写任何运行时逻辑的前提下把type HelloWorld any改成一个确切的string类型让测试用例在编译期通过。本文将以该题为主体结合题库的type-challenges/utils断言工具与template.ts/test-cases.ts源码讲清题目的评判机制、标准解法与扩展写法帮助你迈出类型体操的第一步。题目原文与目标题目位于 questions/00013-warm-hello-world/README.md作者是 Anthony Fu。原题给出的起点代码非常简单// expected to be string type HelloWorld any以及评判用的断言代码// you should make this work type test ExpectEqualHelloWorld, string题目的要求只有一句话把这个类型改成string让测试没有任何类型检查错误。在 Type Challenges 中我们不做console.log、不运行断言库而是用类型系统本身来完成断言——测试用例是编译期类型表达式类型检查通过即视为通过。通过测试需要满足的两个条件打开该题目的 test-cases.ts可以看到本题实际有两个断言约束import type { Equal, Expect, NotAny } from type-challenges/utils type cases [ ExpectNotAnyHelloWorld, ExpectEqualHelloWorld, string, ]这说明仅仅把HelloWorld改成string之外的其他类型比如number、boolean是不够的必须同时满足ExpectNotAnyHelloWorldHelloWorld不能是any防止你直接保留any蒙混过关ExpectEqualHelloWorld, stringHelloWorld必须严格等于string。Expect 与 NotAny 的实现原理这两个断言工具定义在 utils/index.d.tsexport type ExpectT extends true T export type ExpectTrueT extends true T export type IsAnyT 0 extends (1 T) ? true : false export type NotAnyT true extends IsAnyT ? false : trueExpectT对传入的类型参数加了T extends true的约束只有当T可赋值给true时类型才合法。因此ExpectNotAnyHelloWorld实际上要求NotAnyHelloWorld为true即IsAnyHelloWorld为false。这里IsAnyT用了一个经典技巧0 extends (1 T)。当T是any时1 any会坍缩为any0 extends any成立于是IsAnyany为true而对普通类型如string1 string是never0 extends never不成立IsAny为false。Equal 的实现原理同样在 utils/index.d.ts 中Equal采用了基于函数参数逆变位置的判断技巧export type EqualX, Y (T() T extends X ? 1 : 2) extends (T() T extends Y ? 1 : 2) ? true : false它构造两个泛型函数类型(T() T extends X ? 1 : 2)与(T() T extends Y ? 1 : 2)通过比较二者是否互相可赋值来判断X与Y是否严格相等。EqualHelloWorld, string只有在HelloWorld精确等于string时才会解析为true。结合 utils 包的定义utils/package.json 中声明types: index.d.ts测试文件通过import type { Equal, Expect, NotAny } from type-challenges/utils引入这些工具作为workspace:*依赖挂载于 package.json 中并在 pnpm-workspace.yaml 中统一管理。标准解法与验证将 template.ts 中的any改为stringtype HelloWorld string // expected to be a string此时两个断言都会通过NotAnystring为trueEqualstring, string为truecases数组的每个元素都满足Expect的T extends true约束编译期类型检查零错误。在本地验证时仓库根目录的 tsconfig.json 继承了 tsconfig.base.json其中开启了strict: true、noImplicitReturns: true、noUnusedParameters: true等严格选项保证类型断言在严格模式下被完整校验。运行npx tsc --noEmit或pnpm tsc --noEmit即可检查全部题目用例也可以只针对questions/00013-warm-hello-world/目录做类型检查确认无错误输出即通过。扩展练习从 Hello World 看类型断言的价值这道 warm-up 虽然简单却揭示了整个题库的统一评判范式每个题目都由template.ts你的作答区和test-cases.ts编译期断言构成作答正确与否完全由类型系统判定不依赖任何运行时测试框架。以更进阶的题目为例questions/00002-medium-return-type/test-cases.ts 同样使用ExpectEqual...断言MyReturnType的多种输入输出如() string、() Promiseboolean、联合类型返回值等而 questions/00002-medium-return-type/template.ts 中初始实现同样只是一句type MyReturnTypeT any。理解了Equal/Expect的机制你就理解了所有 200 题目的验收方式把any替换为真正的类型推导逻辑让每一个Expect...都在编译期亮起绿灯。小结项目说明题目Hello Worldwarm-up题号 13目标让ExpectNotAnyHelloWorld与ExpectEqualHelloWorld, string编译通过解法type HelloWorld string评判机制纯类型系统断言基于 utils/index.d.ts 的Expect/NotAny/Equal相关文件README.md、template.ts、test-cases.ts从any到string只差一个类型标注却完成了从“无类型约束”到“精确类型断言”的关键一跃。点击题目的 Take the Challenge 按钮开始编码享受类型体操的乐趣吧。赞分享示例工程【免费下载链接】type-challengesCollection of TypeScript type challenges with online judge项目地址https://gitcode.com/GitHub_Trending/ty/type-challenges点击查看免费下载相关推荐Type Challenges项目中的Hello World类型挑战解析Type Challenges项目中的Hello World类型挑战解析 在TypeScript类型编程的学习过程中Type Challenges项目提供了一示例工程怎么让微信公众号变成 RSS 订阅源wewe-rss 私有化部署完整教程怎么让微信公众号变成 RSS 订阅源wewe rss 私有化部署完整教程 你大概有过这种经历想把某个公众号的历史文章收进 RSS 阅读器长期归档结果发现微后端前端Type Challenges 项目中的 Hello World 类型挑战解析Type Challenges 项目中的 Hello World 类型挑战解析 在 TypeScript 类型编程的世界里type challenges 项目示例工程上一篇DataGraph 反应式状态管理Civitai 基于 DAG 的类型安全状态系统深度解析下一篇在 mlx-vlm 中使用 SAM3Mac 上的开放词汇检测、实例分割与视频追踪实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

YOLOv11边缘部署实战:TensorRT量化与加速全链路 2026/9/30 10:15:04

YOLOv11边缘部署实战:TensorRT量化与加速全链路

简介:本资源是一份面向边缘计算与AI部署工程师的实战型技术文档,聚焦YOLOv11模型在资源受限边缘设备上的轻量化落地难题,系统解决模型体积大、推理慢、部署难等核心痛点。文档共30页PDF,结构完整、支持目录跳转与左侧大纲导航&…

阅读更多 →
switch case 嵌套重构:从跳转表到查表法 2026/9/30 10:15:04

switch case 嵌套重构:从跳转表到查表法

写业务代码写到第三年,我发现一个规律:但凡某个函数里if-else叠到第四层,后面接手的人大概率要骂人。这时候多数人的第一反应是换成switch case,觉得它天生就适合处理多分支。可真用下来你会发现,switch case 要是写不…

阅读更多 →
Windows 录屏软件深度对比测评|oCam、ShareX、OBS、Bandicam、EV 录屏、系统自带录屏怎么选 2026/9/30 10:15:03

Windows 录屏软件深度对比测评|oCam、ShareX、OBS、Bandicam、EV 录屏、系统自带录屏怎么选

前言 平时写技术博客、复现软件 BUG、录制操作教程,录屏是必不可少的工具。网上工具五花八门,有水印、收费、功能残缺各种坑。本文测评 6 款高频工具:oCam、微软 Xbox Game Bar 自带录屏、ShareX、Bandicam、OBS Studio、EV 录屏。其中重点分享我长期使用过的 oCam 和 Shar…

阅读更多 →
城市道路打场晒粮AI检测:VOC+YOLO双格式数据集实战指南 2026/9/30 10:15:03

城市道路打场晒粮AI检测:VOC+YOLO双格式数据集实战指南

简介:本资源是面向智慧交通与计算机视觉初学者的打场晒粮目标检测专用数据集,聚焦城市道路场景下违规占道晒粮行为的识别与算法训练需求。数据集共1065张高质量JPG图像,配套Pascal VOC格式XML标注文件与YOLO格式TXT标签文件各1065份&#xff…

阅读更多 →
用4300张猫狗数据跑通YOLO:数据体检、训练调参与避坑复盘 2026/9/30 10:14:49

用4300张猫狗数据跑通YOLO:数据体检、训练调参与避坑复盘

做目标检测这几年,我最大的体会是:真正卡住项目的从来不是网络结构,而是数据。最近在整理宠物识别相关内容时,我把一套4300张的猫狗检测数据集翻来覆去嚼了几遍,用它重新跑通了完整的YOLO训练流程。这套数据集的定位很…

阅读更多 →
Codex CLI从安装到实战:Goal模式、MCP与Skills配置及国内避坑指南 2026/9/30 10:14:49

Codex CLI从安装到实战:Goal模式、MCP与Skills配置及国内避坑指南

1. 从热搜词看Codex CLI的真实使用图景过去大半年,我一直在折腾各类AI编程工具,Codex CLI是其中投入时间最多的一个。原因很简单:它把"对话式写代码"变成了"终端里直接干活",这个体验一旦习惯就回不去了。但热…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉