属性选择、约束
一个属性对象中选出一些对象, 使用Pick<T, K>
type Person = {
name: string;
age: number;
address: string;
};
type PickedPerson = Pick<Person, 'name' | 'age'>;
const person: PickedPerson = {
name: 'Alice',
age: 25,
// address: 'USA' // ❌ 报错:address 不在 PickedPerson 中
};
如果想去掉某些属性,使用 Omit<T, K>
type WithoutAddress = Omit<Person, 'address'>;
// 等同于 { name: string; age: number }
让 T 的所有属性变成可选,使用Partial<T>
type Person = {
name: string;
age: number;
address: string;
};
type PartialPerson = Partial<Person>;
const person: PartialPerson = {
name: "Alice", // 只填一部分属性也不会报错
};
想让传入的函数参数 必须是某个对象的 key,可以使用 keyof 关键字
type Person = {
name: string;
age: number;
address: string;
};
function printKey(key: keyof Person) {
console.log("Key:", key);
}
printKey("name"); // ✅ 正确
printKey("age"); // ✅ 正确
printKey("address"); // ✅ 正确
// printKey("email"); // ❌ 报错:"email" 不是 Person 的 key
范型约束版本:
K extends keyof T 确保 key 只能是 T 的属性名,否则会报错
function getValue<T, K extends keyof T>(obj: T, key: K): T[K] {
return obj[key];
}
const person = { name: "Alice", age: 25 };
console.log(getValue(person, "name")); // ✅ "Alice"
console.log(getValue(person, "age")); // ✅ 25
// console.log(getValue(person, "email")); // ❌ 报错:"email" 不是 `person` 的 key
对象中的属性必须来自于另一个对象的Key
type PickProperties<T, K extends keyof T> = {
[P in K]: T[P];
};
type Person = {
name: string;
age: number;
address: string;
};
type PartialPerson = PickProperties<Person, "name" | "age">;
// 等同于:{ name: string; age: number }

浙公网安备 33010602011771号