布尔类型

布尔类型是最简单的数据类型,只有 truefalse 两个值。

基本用法

let isDone: boolean = false
let isActive: boolean = true

console.log(isDone)   // false
console.log(isActive) // true

类型推断

TypeScript 会根据初始值自动推断类型:

let isComplete = false    // 推断为 boolean
let hasPermission = true  // 推断为 boolean

常见场景

条件判断

let isLoggedIn: boolean = false

if (isLoggedIn) {
  console.log("用户已登录")
} else {
  console.log("请先登录")
}

函数返回值

function isAdult(age: number): boolean {
  return age >= 18
}

console.log(isAdult(20))  // true
console.log(isAdult(15))  // false

对象属性

interface User {
  name: string
  isActive: boolean
  isAdmin: boolean
}

const user: User = {
  name: "张三",
  isActive: true,
  isAdmin: false
}

开关状态

interface Settings {
  darkMode: boolean
  notifications: boolean
  autoSave: boolean
}

const settings: Settings = {
  darkMode: true,
  notifications: false,
  autoSave: true
}

布尔运算

let a: boolean = true
let b: boolean = false

console.log(a && b)  // false - 逻辑与
console.log(a || b)  // true  - 逻辑或
console.log(!a)      // false - 逻辑非

与其他类型转换

转换为布尔值

let value1 = Boolean(1)        // true
let value2 = Boolean(0)        // false
let value3 = Boolean("")       // false
let value4 = Boolean("hello")  // true
let value5 = Boolean(null)     // false
let value6 = Boolean(undefined) // false

使用双感叹号

let value = "hello"
let isTrue = !!value  // true

let empty = ""
let isFalse = !!empty // false

注意事项

不要与 Boolean 对象混淆

let isDone: boolean = false     // 正确:原始类型

let isComplete: Boolean = true  // 不推荐:Boolean 对象

let wrong: boolean = new Boolean(1)  // 错误!

避免隐式转换陷阱

let value: boolean = false

if (value === false) {
  console.log("明确比较更安全")
}

if (!value) {
  console.log("隐式转换也可以")
}

实际应用

class FeatureToggle {
  private features: Map<string, boolean> = new Map()

  enable(feature: string): void {
    this.features.set(feature, true)
  }

  disable(feature: string): void {
    this.features.set(feature, false)
  }

  isEnabled(feature: string): boolean {
    return this.features.get(feature) ?? false
  }
}

const toggle = new FeatureToggle()
toggle.enable("darkMode")
toggle.enable("betaFeatures")

console.log(toggle.isEnabled("darkMode"))       // true
console.log(toggle.isEnabled("notifications"))  // false

类型守卫

function process(value: boolean | string): string {
  if (typeof value === "boolean") {
    return value ? "是" : "否"
  }
  return value
}

console.log(process(true))      // "是"
console.log(process("hello"))   // "hello"