TypeScript 基础指南:字面量类型(Literal Types)

字面量类型(Literal Types)是 TypeScript 中的一个特性,它允许变量或参数被限制为特定的字面量值。 字面量类型有以下几种形式:

字符串字面量类型:
let language: 'javascript' | 'python' | 'java';
language = 'javascript'; // 可以
language = 'python'; // 可以
language = 'ruby'; // 错误

在这个例子中,language 变量只能被赋值为 'javascript'、'python' 或 'java' 三者之一。

数字字面量类型:
function getArea(shape: 'circle' | 'rectangle', width: 4 | 5, height?: 4 | 5) {
  if (shape === 'circle') {
    return Math.PI * width * width;
  } else {
    return width * (height || width);
  }
}

getArea('circle', 4); // 可以
getArea('rectangle', 4, 5); // 可以
getArea('rectangle', 4, 6); // 错误

在这个例子中,getArea 函数的 shape 参数只能是 'circle' 或 'rectangle',width 和 height 参数只能是 4 或 5。

布尔字面量类型:
function setDirection(direction: 'left' | 'right' | 'up' | 'down') {
  // ...
}

setDirection('left'); // 可以
setDirection(true); // 错误

在这个例子中,setDirection 函数的参数只能是 'left'、'right'、'up' 或 'down' 四者之一。 字面量类型的主要用途包括:

减少错误
通过限制变量或参数的值域,可以在编译时捕获潜在的错误。
提高可读性
使用具有明确语义的字面量类型可以提高代码的可读性。
增强类型安全
字面量类型可以与联合类型、交叉类型等高级类型结合使用,进一步增强类型系统的表达能力。

总的来说,字面量类型是 TypeScript 类型系统中的一个强大特性,可以帮助开发者编写更加安全和可维护的代码。在合适的场景下使用字面量类型,可以显著提高代码质量。