新闻详情

新闻详情

首页 / 资讯中心 / 详情

typescript-expert - typescript-cheatsheet

发布时间:2026/9/26 10:30:59来源:尧图网络
typescript-expert - typescript-cheatsheet
TypeScript 速查表类型基础// Primitivesconstname:stringJohnconstage:number30constisActive:booleantrueconstnothing:nullnullconstnotDefined:undefinedundefined// Arraysconstnumbers:number[][1,2,3]conststrings:Arraystring[a,b,c]// Tupleconsttuple:[string,number][hello,42]// Objectconstuser:{name:string;age:number}{name:John,age:30}// Unionconstvalue:string|numberhello// Literalconstdirection:up|down|left|rightup// Any vs UnknownconstanyValue:anyanything// ❌ AvoidconstunknownValue:unknownsafe// ✅ Prefer, requires narrowing类型别名与接口// Type AliastypePoint{x:numbery:number}// Interface (preferred for objects)interfaceUser{id:stringname:stringemail?:string// OptionalreadonlycreatedAt:Date// Readonly}// ExtendinginterfaceAdminextendsUser{permissions:string[]}// IntersectiontypeAdminUserUser{permissions:string[]}泛型// Generic functionfunctionidentityT(value:T):T{returnvalue}// Generic with constraintfunctiongetLengthTextends{length:number}(item:T):number{returnitem.length}// Generic interfaceinterfaceApiResponseT{data:Tstatus:numbermessage:string}// Generic with defaulttypeContainerTstring{value:T}// Multiple genericsfunctionmergeT,U(obj1:T,obj2:U):TU{return{...obj1,...obj2}}工具类型interfaceUser{id:stringname:stringemail:stringage:number}// Partial - all optionaltypePartialUserPartialUser// Required - all requiredtypeRequiredUserRequiredUser// Readonly - all readonlytypeReadonlyUserReadonlyUser// Pick - select propertiestypeUserNamePickUser,id|name// Omit - exclude propertiestypeUserWithoutEmailOmitUser,email// Record - key-value maptypeUserMapRecordstring,User// Extract - extract from uniontypeStringOrNumberstring|number|booleantypeOnlyStringsExtractStringOrNumber,string// Exclude - exclude from uniontypeNotStringExcludeStringOrNumber,string// NonNullable - remove null/undefinedtypeMaybeStringstring|null|undefinedtypeDefinitelyStringNonNullableMaybeString// ReturnType - get function return typefunctiongetUser(){return{name:John}}typeUserReturnReturnTypetypeofgetUser// Parameters - get function parameterstypeGetUserParamsParameterstypeofgetUser// Awaited - unwrap PromisetypeResolvedUserAwaitedPromiseUser条件类型// Basic conditionaltypeIsStringTTextendsstring?true:false// Infer keywordtypeUnwrapPromiseTTextendsPromiseinferU?U:T// Distributive conditionaltypeToArrayTTextendsany?T[]:nevertypeResultToArraystring|number// string[] | number[]// NonDistributivetypeToArrayNonDistT[T]extends[any]?T[]:never模板字面量类型typeColorred|green|bluetypeSizesmall|medium|large// CombinetypeColorSize${Color}-${Size}// red-small | red-medium | red-large | ...// Event handlerstypeEventNameclick|focus|blurtypeEventHandleron${CapitalizeEventName}// onClick | onFocus | onBlur映射类型// Basic mapped typetypeOptionalT{[KinkeyofT]?:T[K]}// With key remappingtypeGettersT{[KinkeyofTasget${CapitalizestringK}]:()T[K]}// Filter keystypeOnlyStringsT{[KinkeyofTasT[K]extendsstring?K:never]:T[K]}类型守卫// typeof guardfunctionprocess(value:string|number){if(typeofvaluestring){returnvalue.toUpperCase()// string}returnvalue.toFixed(2)// number}// instanceof guardclassDog{bark(){}}classCat{meow(){}}functionmakeSound(animal:Dog|Cat){if(animalinstanceofDog){animal.bark()}else{animal.meow()}}// in guardinterfaceBird{fly():void}interfaceFish{swim():void}functionmove(animal:Bird|Fish){if(flyinanimal){animal.fly()}else{animal.swim()}}// Custom type guardfunctionisString(value:unknown):valueisstring{returntypeofvaluestring}// Assertion functionfunctionassertIsString(value:unknown):assertsvalueisstring{if(typeofvalue!string){thrownewError(Not a string)}}可辨识联合Discriminated Unions// With type discriminanttypeSuccessT{type:success;data:T}typeError{type:error;message:string}typeLoading{type:loading}typeStateTSuccessT|Error|LoadingfunctionhandleT(state:StateT){switch(state.type){casesuccess:returnstate.data// Tcaseerror:returnstate.message// stringcaseloading:returnnull}}// Exhaustive checkfunctionassertNever(value:never):never{thrownewError(Unexpected value:${value})}品牌类型Branded Types// Create branded typetypeBrandK,TK{__brand:T}typeUserIdBrandstring,UserIdtypeOrderIdBrandstring,OrderId// Constructor functionsfunctioncreateUserId(id:string):UserId{returnidasUserId}functioncreateOrderId(id:string):OrderId{returnidasOrderId}// Usage - prevents mixingfunctiongetOrder(orderId:OrderId,userId:UserId){}constuserIdcreateUserId(user-123)constorderIdcreateOrderId(order-456)getOrder(orderId,userId)// ✅ OK// getOrder(userId, orderId) // ❌ Error - types dont match模块声明// Declare module for untyped packagedeclaremoduleuntyped-package{exportfunctiondoSomething():voidexportconstvalue:string}// Augment existing moduledeclaremoduleexpress{interfaceRequest{user?:{id:string}}}// Declare globaldeclareglobal{interfaceWindow{myGlobal:string}}TSConfig 要点{compilerOptions:{// Strictnessstrict:true,noUncheckedIndexedAccess:true,noImplicitOverride:true,// Modulesmodule:ESNext,moduleResolution:bundler,esModuleInterop:true,// Outputtarget:ES2022,lib:[ES2022,DOM],// PerformanceskipLibCheck:true,incremental:true,// PathsbaseUrl:.,paths:{/*:[./src/*]}}}最佳实践// ✅ Prefer interface for objectsinterfaceUser{name:string}// ✅ Use const assertionsconstroutes[home,about]asconst// ✅ Use satisfies for validationconstconfig{api:https://api.example.com}satisfies Recordstring,string// ✅ Use unknown over anyfunctionparse(input:unknown){if(typeofinputstring){returnJSON.parse(input)}}// ✅ Explicit return types for public APIsexportfunctiongetUser(id:string):User|null{// ...}// ❌ Avoidconstdata:anyfetchData()data.anything.goes.wrong// No type safety
网站建设高端定制企业官网
RELATED

相关资讯

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

较早相关资讯

最新相关资讯

MindSpore训练监控实战:TensorBoard在Transformer模型中的应用与优化 2026/9/26 20:48:26

MindSpore训练监控实战:TensorBoard在Transformer模型中的应用与优化

1. 为什么训练监控这件事值得单独拿出来聊搞深度学习训练的人都有一个共识:模型跑起来只是第一步,真正折磨人的是跑起来之后你根本不知道它到底在干什么。Loss 曲线是平稳下降还是在震荡?学习率是不是到了该衰减的时候?梯度有没有…

阅读更多 →
Substrate区块链开发框架:模块化架构与无分叉升级实战指南 2026/9/26 20:48:20

Substrate区块链开发框架:模块化架构与无分叉升级实战指南

1. 从零认识 Substrate:它到底是什么,能解决什么问题第一次听到 Substrate 这个词,很多人会以为是某个前端框架或者构建工具,毕竟名字听起来就很“底层”。但如果你接触过区块链开发,尤其是需要自己搭一条链的场景&…

阅读更多 →
Qwen2.5-7B中文对话LoRA微调实战指南 2026/9/26 20:48:20

Qwen2.5-7B中文对话LoRA微调实战指南

1. 这不是“调参游戏”,而是一次中文对话能力的精准手术你手头有一台刚组装好的7B级大模型,它能背《论语》、会写Python、甚至能分析财报——但一聊起“上海地铁早高峰怎么避开3号线换乘”或者“我妈总说‘你这孩子怎么不听劝’,我该怎么回”…

阅读更多 →
MySQL初阶(下):安装排错、索引优化、事务锁与主从复制全解析 2026/9/26 20:48:20

MySQL初阶(下):安装排错、索引优化、事务锁与主从复制全解析

先说两句大实话:MySQL入门这个系列的上篇把安装、建库建表、增删改查聊完了,后台催更的人一直没断过。搜索mysql教程的帖子一搜一大把,但多数新手卡住的地方其实特别固定,比如装完了连不上、初始密码找不到、update误删了数据、查…

阅读更多 →
C语言实现Kruskal算法:最小生成树与并查集详解 2026/9/26 20:48:20

C语言实现Kruskal算法:最小生成树与并查集详解

1. 为什么还值得手写一遍 Kruskal学数据结构的时候,最小生成树是绕不开的一个经典问题。当年我啃 Kruskal 算法的时候,教材上就给了几页伪代码和一张图,看起来很简单——“把边排序,从小到大一条条加进去,不成环就收”…

阅读更多 →
双芯耦合光子晶体光纤传感器:设计、仿真与实验验证 2026/9/26 20:48:13

双芯耦合光子晶体光纤传感器:设计、仿真与实验验证

光子晶体光纤(Photonic Crystal Fiber,PCF)这几年在传感器课程设计、通信工程毕业设计里出现频率越来越高。它最迷人的一点是:你可以直接在结构上“设计”光的路径,而不是像普通光纤那样只能被动接受芯包层折射率差。单…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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