// Basic mapped typetypeOptional<T>={[KinkeyofT]?:T[K]}// With key remappingtypeGetters<T>={[KinkeyofTas`get${Capitalize<string&K>}`]:()=>T[K]}// Filter keystypeOnlyStrings<T>={[KinkeyofTasT[K]extendsstring?K:never]:T[K]}
类型守卫
// typeof guardfunctionprocess(value:string|number){if(typeofvalue==='string'){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('fly'inanimal){animal.fly()}else{animal.swim()}}// Custom type guardfunctionisString(value:unknown):valueisstring{returntypeofvalue==='string'}// Assertion functionfunctionassertIsString(value:unknown):assertsvalueisstring{if(typeofvalue!=='string'){thrownewError('Not a string')}}
可辨识联合(Discriminated Unions)
// With type discriminanttypeSuccess<T>={type:'success';data:T}typeError={type:'error';message:string}typeLoading={type:'loading'}typeState<T>=Success<T>|Error|Loadingfunctionhandle<T>(state:State<T>){switch(state.type){case'success':returnstate.data// Tcase'error':returnstate.message// stringcase'loading':returnnull}}// Exhaustive checkfunctionassertNever(value:never):never{thrownewError(`Unexpected value:${value}`)}
// ✅ Prefer interface for objectsinterfaceUser{name:string}// ✅ Use const assertionsconstroutes=['home','about']asconst// ✅ Use satisfies for validationconstconfig={api:'https://api.example.com'}satisfies Record<string,string>// ✅ Use unknown over anyfunctionparse(input:unknown){if(typeofinput==='string'){returnJSON.parse(input)}}// ✅ Explicit return types for public APIsexportfunctiongetUser(id:string):User|null{// ...}// ❌ Avoidconstdata:any=fetchData()data.anything.goes.wrong// No type safety
ChatGPT Work 还是 Codex?需求、文档、代码三类任务的入口决策表 [!NOTE] ChatGPT Work 与 Codex 不是简单的“一个写文档、一个写代码”,真正的分界在交付物、所需工具、执行环境和验收证据。 Work 更适合从目标出发组织多来源材料并形成可审阅成果;Codex 更适合进入代码库…