我们可以使用 TypeScript 来编写这个函数,代码示例如下:
interface SomeObject {
[key: string]: unknown;
}
function createNewObjectWithKey(obj: T, key: K): {[key in K]: T[K]} {
return {[key]: obj[key]} as {[key in K]: T[K]};
}
这个函数接收两个参数,一个是任意类型的对象,一个是对象的某个属性名称。返回值是一个新对象,它只有一个属性,即传入的属性名称,并且这个属性的值是原对象中对应属性的值。
我们使用泛型来确保这个函数是类型安全的。泛型 T
表示传入的对象的类型,而泛型 K
表示对象属性的名称。我们使用 TypeScript 的 keyof
关键字来限定 K
必须是 T
的某个属性名称。
对于返回值类型,我们使用 as
关键字来强制转换类型,这是因为 TypeScript 无法推断出返回值类型的确切结构。使用 {[key in K]: T[K]}
的语法,我们可以定义一个对象类型,它只有一个属性,属性名称为 K
,属性值的类型为 T[K]
,这样就能确保返回值的类型是符合预期的。
这个函数的使用示例如下:
const obj = {
name: 'Alice',
age: 30,
address: {
city: 'New York',
country: 'USA'
}
};
const newObj = createNewObjectWithKey(obj, 'name');
// newObj 的类型为 {name: string}
// newObj 的值为 {name: 'Alice'}
const newAddress = createNewObjectWithKey(obj.address, 'city');
// newAddress 的类型为 {city: unknown}
// newAddress 的值为 {city: 'New York