可以使用 TypeScript 的泛型和约束来实现这个通用函数。例如,我们通过定义一个接口来限定对象必须包含某些属性:
interface IUser {
name: string;
age: number;
}
function printNameAndAge(user: T): void {
console.log(`Name: ${user.name}, Age: ${user.age}`);
}
在上面的代码中,printNameAndAge
函数接收一个泛型参数 T
,并使用 extends
约束该泛型必须是 IUser
接口的子类型,这样就可以确保对象包含 name
和 age
属性。
现在我们可以定义具有 name
和 age
属性的对象并将其传递给 printNameAndAge
函数:
const user = {
name: "Bob",
age: 30,
email: "bob@example.com"
};
printNameAndAge(user);
在上面的代码中,我们定义了一个名为 user
的对象,该对象包含 name
、age
和 email
属性。虽然 email
属性不符合 IUser
接口的要求,但 TypeScript 编译器不会报错,因为我们只使用了 name
和 age
属性,并且这些属性是必需的。
当我们执行 printNameAndAge(user)
时,它将输出 Name: Bob, Age: 30
,因为 user
对象包含这些属性。
注意,虽然 printNameAndAge
函数中使用了 void
关键字表示没有返回值,但实际上它返回的是 undefined
。