TypeScript 运算符

TypeScript 运算符详解

TypeScript 的运算符与 JavaScript 完全一致(因为 TS 是 JS 的超集),包括算术、比较、逻辑、赋值、位运算等。TypeScript 的优势在于类型检查会结合运算符进行静态分析,能在编译时捕获潜在的类型错误。

以下按类别详细列出常用运算符,并标注 TypeScript 特有的类型影响。

1. 算术运算符(Arithmetic Operators)

运算符描述示例结果TS 类型注意点
+加法5 + 38字符串拼接:"a" + "b""ab"
-减法5 - 32
*乘法5 * 315
/除法10 / 33.333…
%取模(余数)10 % 31
**幂(ES2016+)2 ** 38
++自增let a = 1; a++;2
--自减let a = 2; a--;1

TS 示例

let num: number = 10 + 5;        // OK
let str: string = "Hello" + " TS"; // 字符串拼接

// let error: number = "10" + 5; // 编译错误(strict 模式下):结果为 string "105"
let fixed: number = Number("10") + 5; // 正确

2. 比较运算符(Comparison Operators)

返回 boolean 类型。

运算符描述示例结果
==松散相等(类型转换)5 == "5"true
===严格相等(类型+值)5 === "5"false
!=松散不相等5 != "5"false
!==严格不相等5 !== "5"true
>大于5 > 3true
<小于5 < 3false
>=大于等于5 >= 5true
<=小于等于3 <= 5true

推荐始终使用 ===!==,避免类型转换带来的意外。

3. 逻辑运算符(Logical Operators)

运算符描述示例结果/行为
&&逻辑与(短路)true && falsefalse
||逻辑或(短路)true || falsetrue
!逻辑非!truefalse
??空值合并(Nullish Coalescing)null ?? "default"“default”(仅 null/undefined 时生效)

TS 类型影响:逻辑运算符常用于类型缩小(Type Narrowing)。

function greet(name: string | null) {
  const realName = name ?? "Guest";  // realName 类型被缩小为 string
  console.log(`Hello ${realName.toUpperCase()}`); // 安全调用
}

4. 赋值运算符(Assignment Operators)

运算符描述等价写法
=简单赋值a = b
+=加法赋值a = a + b
-=减法赋值a = a - b
*=乘法赋值a = a * b
/=除法赋值a = a / b
%=取模赋值a = a % b
**=幂赋值a = a ** b

5. 位运算符(Bitwise Operators)

对数字的二进制位操作(常用于性能优化或底层编程)。

运算符描述示例
&位与5 & 1 → 1
|位或5 | 1 → 5
^位异或5 ^ 1 → 4
~位非~5 → -6
<<左移5 << 1 → 10
>>带符号右移5 >> 1 → 2
>>>无符号右移5 >>> 1 → 2

6. 三元条件运算符(Ternary Operator)

condition ? exprIfTrue : exprIfFalse

示例:

let status: string = age >= 18 ? "成人" : "未成年";

// TS 类型推断:status 为 string

7. 类型相关特殊运算符

这些是 TypeScript 独有的(仅在类型系统中存在,编译后消失):

运算符描述示例
typeof类型查询(类型空间)type Name = typeof username; // string
keyof获取对象类型的所有键type Keys = keyof User; // "name" | "age"
in遍历联合类型中的键type Check<P in keyof T> = ...
as类型断言(Assertion)let el = document.querySelector("div") as HTMLDivElement;
!非空断言(Non-null Assertion)let name = user.name!;(断言不为 null/undefined)
?.可选链(Optional Chaining)user?.profile?.avatar
??空值合并(已在上文)

8. 最佳实践建议

  1. 始终使用严格相等===!==
  2. 优先使用 ?? 而非 ||:当你只想处理 null/undefined 时。
  3. 利用可选链和非空断言减少运行时错误:
   let length = str?.length ?? 0;  // 安全
  1. 开启 strictNullChecks:强制处理 null/undefined。

小结:常用运算符速查

类别常用运算符
算术+ - * / % ** ++ --
比较=== !== > < >= <=
逻辑&& || ! ??
赋值= += -= *= /= **=
类型安全?. ?? ! as typeof keyof

如果您想深入某个运算符(如可选链的详细用法、位运算实战、或类型运算符如 keyof/in),或者需要完整代码示例,请随时告诉我!

文章已创建 3383

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部