首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在推断值的同时约束TypeScript对象的键?

在TypeScript中,可以使用索引类型和条件类型来约束对象的键和值。

要在推断值的同时约束TypeScript对象的键,可以使用索引类型。索引类型允许我们根据对象的键来获取相应的值类型。通过定义索引类型,可以约束对象的键必须属于特定的类型。

以下是如何在推断值的同时约束TypeScript对象的键的示例代码:

代码语言:txt
复制
function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
  return obj[key];
}

const user = { id: 1, name: 'John' };

const id = getProperty(user, 'id'); // 推断为 number 类型
const name = getProperty(user, 'name'); // 推断为 string 类型
const age = getProperty(user, 'age'); // 编译错误,age 不是 user 对象的键

在上面的示例中,getProperty 函数接受一个对象和一个键,并根据键从对象中获取相应的值。通过使用 keyof T,我们将键约束为对象 T 的有效键。返回值类型 T[K] 则表示对象 T 中键 K 对应的值类型。

如果要同时约束键和值,可以使用条件类型。条件类型允许我们基于类型判断来选择不同的结果类型。

以下是如何在推断值的同时约束TypeScript对象的键和值的示例代码:

代码语言:txt
复制
type ObjectWithKeyAndValue<T, K extends keyof T, V> = K extends keyof T ? Record<K, V> : never;

function createObjectWithKeyAndValue<T, K extends keyof T, V>(obj: T, key: K, value: V): ObjectWithKeyAndValue<T, K, V> {
  return { [key]: value } as ObjectWithKeyAndValue<T, K, V>;
}

const user = { id: 1, name: 'John' };

const updatedUser = createObjectWithKeyAndValue(user, 'id', 2); // 返回 { id: 2 }
const newUser = createObjectWithKeyAndValue(user, 'age', 25); // 编译错误,age 不是 user 对象的键

在上面的示例中,我们定义了一个 ObjectWithKeyAndValue 条件类型,根据键 K 是否属于对象 T 的键来选择返回类型。如果键 K 是对象 T 的键,则返回一个具有键 K 和值类型 V 的对象类型,否则返回 never 类型。createObjectWithKeyAndValue 函数使用这个条件类型,根据给定的键和值创建一个新的对象。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的合辑

领券