目录
4. 限制参数只能是某些数组里的元素(as const + 联合推导)
1. 限制参数只能是某几个固定值(联合字面量类型)
最常见的写法就是 字面量联合类型:
function setStatus(status: "success" | "error" | "pending") {
console.log("status:", status);
}
setStatus("success"); // ✅ 正确
setStatus("error"); // ✅ 正确
setStatus("pending"); // ✅ 正确
setStatus("failed"); // ❌ 报错,不在允许范围内
⚡️ 使用场景:枚举型参数(如状态、方向、主题等)。
2. 使用 enum 枚举来限制参数
enum Role {
Admin = "admin",
User = "user",
Guest = "guest"
}
function login(role: Role) {
console.log("role:", role);
}
login(Role.Admin); // ✅ 正确
login("admin"); // ❌ 报错,必须用枚举值
⚡️ 适合参数值比较多、需要复用时。
3. 函数参数限制为固定键(keyof)
如果参数是 对象的 key,可以用 keyof:
type User = {
id: number;
name: string;
age: number;
};
function getUserProperty(user: User, key: keyof User) {
return user[key];
}
const u: User = { id: 1, name: "Tom", age: 18 };
getUserProperty(u, "id"); // ✅
getUserProperty(u, "name"); // ✅
getUserProperty(u, "gender"); // ❌ 报错
⚡️ 适合在对象字段名范围内传参。
4. 限制参数只能是某些数组里的元素(as const + 联合推导)
const COLORS = ["red", "green", "blue"] as const;
type Color = typeof COLORS[number];
function setColor(c: Color) {
console.log("color:", c);
}
setColor("red"); // ✅
setColor("yellow"); // ❌
⚡️ 适合参数选项可枚举,但想避免手写联合类型的情况。
5. 多参数时某些参数必须固定
可以通过 函数重载 或 条件类型 来实现:
function request(type: "GET", url: string): void;
function request(type: "POST", url: string, data: object): void;
function request(type: "GET" | "POST", url: string, data?: object) {
console.log(type, url, data);
}
request("GET", "/api"); // ✅ 正确
request("POST", "/api", { a: 1 }); // ✅ 正确
request("POST", "/api"); // ❌ 报错,POST 必须传 data
⚡️ 适合 API 请求这类严格参数校验。
✅ 总结:
-
几个固定字符串/数值 → 字面量联合类型(推荐)
-
需要复用或语义化 → enum
-
参数是对象字段 → keyof
-
数组值限定 →
as const -
不同参数组合 → 函数重载
372



被折叠的 条评论
为什么被折叠?



