前言TypeScript的官方文档已经更新,但我能找到的中文文档还是旧版本。因此,对一些新增和修改的章节进行了翻译和整理。本文整理自TypeScriptHandbook中的“Typeof类型运算符”一章。本文并没有严格按照原文翻译,部分内容也做了说明和补充。typeof类型运算符(Thetypeoftypeoperator)JavaScript本身有一个typeof运算符,你可以在表达式上下文(expressioncontext)中使用它://Prints"string"console.log(typeof"Helloworld");而TypeScript添加的typeof方法可以在类型上下文中使用来获取变量或属性的类型。lets="hello";letn:typeofs;//letn:string如果只是用来判断基本类型,自然用处不大,只能和其他类型运算符结合使用。例如:例如,使用TypeScript内置的ReturnTypep。你传入一个函数类型,ReturnTypep会返回函数返回值的类型:typePredicate=(x:unknown)=>boolean;typeK=ReturnType;///typeK=boolean如果我们直接在函数名上使用ReturnType,我们会看到这样的错误:functionf(){return{x:10,y:3};}typeP=ReturnType;//'f'指代value,但在这里用作类型。您指的是'typeoff'吗?这是因为值和类型不是一回事。为了得到函数f类型的值f,我们需要使用typeof:functionf(){return{x:10,y:3};}typeP=ReturnType;//typeP={//x:number;//y:number;//}限制(Limitations)TypeScript有意限制了可以使用typeof的表达式类型。在TypeScript中,只有在标识符(例如变量名)或其属性上使用typeof才是合法的。这可能会导致一些令人困惑的问题://Meanttouse=ReturnTypeletshouldContinue:typeofmsgbox("Areyousureyouwanttocontinue?");//','expected.我们的意图是想得到msgbox("Areyousureyouwanttocontinue?")的返回值的类型,所以我直接使用了typeofmsgbox("Areyousureyouwanttocontinue?"),貌似可以正常工作,但实际上不行,因为typeof只能用在标识符和属性上。正确的写法应该是:ReturnType(注:原文到此结束)Usingtypeofonanobject,我们可以对一个对象使用typeof:constperson={name:"kevin",age:"18"}typeKevin=typeofperson;//typeKevin={//name:string;//age:string;//}对函数使用typeof我们也可以对函数使用typeof:functionidentity(arg:Type):Type{returnarg;}typeresult=typeofidentity;//typeresult=(arg:Type)=>Type对enum使用typeof在TypeScript中,enum是一种新的数据类型,但在具体运行,它会被编译成一个对象。enumUserResponse{No=0,Yes=1,}对应编译后的JavaScript代码:varUserResponse;(function(UserResponse){UserResponse[UserResponse["No"]=0]="No";UserResponse[UserResponse["Yes"]=1]="是";})(UserResponse||(UserResponse={}));如果我们打印UserResponse:console.log(UserResponse);//[LOG]:{//"0":"No",//"1":"Yes",//"No":0,//"Yes":1//}如果我们使用typeofforUserResponse:typeresult=typeofUserResponse;//okconsta:result={"No":2,"Yes":3}结果类型如下://{//"No":number,//"YES":number//}但只对枚举类型使用typeof一般是没有用的,一般和keyof运算符一起使用,获取属性名的联合字符串:typeresult=keyoftypeofUserResponse;//typeresult="没有”|《是》TypeScript系列官方文档翻译的TypeScript系列文章,由重点难点解析、实战技巧三部分组成,涵盖入门、进阶、实战。旨在为您提供系统的TS学习教程。整个系列预计约有40篇文章。点此浏览全系列文章,建议顺便收藏本站。微信:“mqyqingfeng”,加我到世优唯一的读者群。如有错误或不准确的地方,请务必指正,万分感谢。如果你喜欢或者有启发,欢迎star,这也是对作者的鼓励。