TypeScript - 字面量类型:初学者指南
你好,未来的编程巨星!今天,我们将深入了解TypeScript字面量类型的精彩世界。如果你是编程新手,不用担心——我会成为你这次冒险中的友好向导。在本教程结束时,你将能够像专业人士一样使用字面量类型!
字面量类型是什么?
在我们开始之前,让我们想象你正在点披萨。你不能只是说,“我想要一份披萨。”你需要指定大小:小、中或大。在TypeScript中,字面量类型就像那些特定的披萨大小——它们是变量可以具有的确切值。
语法
字面量类型的语法很简单。你只需要使用你想要允许的确切值。让我们来看一个基本示例:
let pizzaSize: "small" | "medium" | "large";
在这个例子中,pizzaSize
只能被赋值为"small"、"medium"或"large"。不允许其他值——即使是"超大"或"迷你"!
字符串字面量类型
字符串字面量类型是最常见且最容易理解的。它们正如其名——变量可以是特定的字符串。
示例 1:星期天数
type DayOfWeek = "Monday" | "Tuesday" | "Wednesday" | "Thursday" | "Friday" | "Saturday" | "Sunday";
let today: DayOfWeek = "Monday";
today = "Friday"; // 这没问题
today = "Someday"; // 错误!类型 '"Someday"' 不能赋值给类型 'DayOfWeek'。
在这个例子中,DayOfWeek
是一个只能被赋值为一周七天的类型。尝试赋值其他字符串,TypeScript会对你摇头!
示例 2:交通信号灯颜色
type TrafficLightColor = "Red" | "Yellow" | "Green";
function changeLight(color: TrafficLightColor) {
console.log(`灯光已经变成 ${color}`);
}
changeLight("Green"); // 没问题
changeLight("Purple"); // 错误!参数的类型 '"Purple"' 不能赋值给参数类型 'TrafficLightColor'。
在这里,我们确保交通信号灯只能变成有效的颜色。这条街上不允许有迪斯科灯!
数数字面量类型
和字符串一样,我们可以使用数字来创建字面量类型。这在你想要限制值为特定数字时非常有用。
示例 3:掷骰子
type DiceRoll = 1 | 2 | 3 | 4 | 5 | 6;
function rollDice(): DiceRoll {
return Math.floor(Math.random() * 6) + 1 as DiceRoll;
}
let myRoll = rollDice();
console.log(`你掷出了一个 ${myRoll}`);
在这个例子中,我们确保骰子只能掷出1到6的数字。我们的游戏中没有灌铅骰子!
示例 4:衬衫尺寸
type ShirtSize = 36 | 38 | 40 | 42 | 44;
let myShirtSize: ShirtSize = 40;
myShirtSize = 41; // 错误!类型 '41' 不能赋值给类型 'ShirtSize'。
在这里,我们限制了衬衫尺寸为特定的数字。这家店里不允许有中间尺寸!
组合字面量类型
当我们结合不同类型的字面量时,字面量类型的真正力量就会显现出来。
示例 5:游戏角色状态
type CharacterStatus = "Alive" | "Dead" | 1 | 0;
let hero: CharacterStatus = "Alive";
hero = 1; // 这也是有效的
hero = "Wounded"; // 错误!类型 '"Wounded"' 不能赋值给类型 'CharacterStatus'。
在这个游戏中,一个角色的状态可以是"Alive"、"Dead"、1(代表活着)或0(代表死亡)。就像同时有了文本和代码表示!
字面量类型的使用场景
字面量类型在许多场景中都非常有用。让我们探索几个:
1. 函数参数
type HttpMethod = "GET" | "POST" | "PUT" | "DELETE";
function sendRequest(url: string, method: HttpMethod) {
// 发送请求
console.log(`发送 ${method} 请求到 ${url}`);
}
sendRequest("https://api.example.com", "GET"); // 没问题
sendRequest("https://api.example.com", "FETCH"); // 错误!参数的类型 '"FETCH"' 不能赋值给参数类型 'HttpMethod'。
通过为HTTP方法使用字面量类型,我们确保只能使用有效的请求方法。
2. 配置对象
type Theme = "light" | "dark" | "system";
type Language = "en" | "es" | "fr" | "de";
interface AppConfig {
theme: Theme;
language: Language;
notifications: boolean;
}
const myConfig: AppConfig = {
theme: "dark",
language: "en",
notifications: true
};
字面量类型帮助我们创建严格的配置对象,防止打字错误和无效设置。
3. 状态机
type LoginState = "loggedOut" | "loggingIn" | "loggedIn" | "error";
class LoginManager {
private state: LoginState = "loggedOut";
login() {
this.state = "loggingIn";
// 执行登录逻辑
this.state = Math.random() > 0.5 ? "loggedIn" : "error";
}
logout() {
this.state = "loggedOut";
}
getState(): LoginState {
return this.state;
}
}
在这里,我们使用字面量类型表示登录过程中的不同状态,确保状态只能是预定义值之一。
方法表
下面是一个总结我们涵盖的关键方法和概念的表格:
方法/概念 | 描述 | 示例 |
---|---|---|
类型声明 | 使用字面量值定义新类型 | type DayOfWeek = "Monday" | "Tuesday" | ... |
变量赋值 | 将字面量类型赋值给变量 | let today: DayOfWeek = "Monday"; |
函数参数 | 在函数参数中使用字面量类型 | function sendRequest(method: HttpMethod) {...} |
组合字面量 | 混合不同类型的字面量 | type Status = "Active" | "Inactive" | 0 | 1; |
接口属性 | 在接口属性中使用字面量类型 | interface Config { theme: "light" | "dark" } |
就这样,我的编程学徒!你已经通过掌握字面量类型在TypeScript旅程中升级了。记住,就像选择完美的披萨配料一样,字面量类型帮助你明确并避免错误。继续练习,很快你就能创建出像精心制作的披萨一样美味的类型安全代码!??
Credits: Image by storyset