JavaScript 语言中,typeof 运算符 是一个 一元运算符,返回一个字符串,代表操作数的类型
注意,这时 typeof 的操作数是一个值。JavaScript 里面,typeof 运算符只可能返回八种结果,而且都是字符串
TypeScript 将 typeof 运算符移植到了类型运算,它的操作数依然是一个值,但是返回的不是字符串,而是该值的 TypeScript 类型
这种用法的 typeof 返回的是 TypeScript 类型,所以只能用在类型运算之中(即跟类型相关的代码之中),不能用在值运算
也就是说,同一段代码可能存在两种 typeof 运算符,一种用在值相关的 JavaScript 代码部分,另一种用在类型相关的 TypeScript 代码部分
JavaScript 的 typeof 遵守 JavaScript 规则,TypeScript 的 typeof 遵守 TypeScript 规则。它们的一个重要区别在于,编译后,前者会保留,后者会被全部删除。上例的代码编译结果如下
由于编译时不会进行 JavaScript 的值运算,所以 TypeScript 规定,typeof 的参数只能是标识符,不能是需要运算的表达式
另外,typeof 命令的参数不能是类型