Keyof 推断字符串 当键只是一个字符串时的数字

typescript

1个回答

写回答

ouou1234

2025-06-20 19:35

+ 关注

typescript
typescript

Keyof是一种在typescript中使用的类型操作符,用于从一个对象类型中获取其所有属性名组成的联合类型。在某些情况下,我们可以使用Keyof推断出一个对象类型的属性名的类型,这在编写泛型代码时非常有用。

推断字符串当键只是一个字符串时的数字

在某些情况下,我们可能需要根据一个对象的属性名来获取对应的属性值的类型。例如,我们有一个对象类型Person,它有一个属性名为name的属性,我们想要获取这个属性的值的类型。

typescript

type Person = {

name: string;

age: number;

gender: string;

};

type NameType = Person['name']; // string

在上面的例子中,我们使用了Person['name']来获取Person类型中name属性的值的类型,即字符串类型。

在某些情况下,我们可能想要根据一个对象的属性名来获取对应的属性值的类型,但是属性名是一个动态的字符串,它不是一个已知的字面量。这时,我们可以使用Keyof来推断出这个动态字符串的类型。

typescript

type Person = {

name: string;

age: number;

gender: string;

};

function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {

return obj[key];

}

const person: Person = {

name: 'John',

age: 25,

gender: 'male',

};

const name: string = getProperty(person, 'name'); // 'John'

const age: number = getProperty(person, 'age'); // 25

const gender: string = getProperty(person, 'gender'); // 'male'

在上面的例子中,我们定义了一个泛型函数getProperty,它接受一个对象obj和一个属性名key,并返回该属性的值的类型。我们使用了keyof T来限制key的类型,确保它是T类型的属性名。在函数体内部,我们使用了T[K]来获取obj[key]的类型,即属性的值的类型。

使用Keyof推断字符串当键只是一个字符串时的数字

在某些情况下,我们可能需要根据一个对象的属性名来获取对应的属性值的类型,并且这个属性名是一个已知的字符串。例如,我们有一个对象类型Data,它有一些属性,其中一个属性名为key,它的值为一个字符串,表示其他属性的键名。我们想要根据key属性的值来获取其他属性的值的类型。

typescript

type Data = {

key: string;

value: number | string | boolean;

};

type ValueOfKey<T extends Data> = T[T['key']];

const data1: Data = {

key: 'value',

value: 10,

};

const data2: Data = {

key: 'name',

value: 'John',

};

const data3: Data = {

key: 'isMale',

value: true,

};

const value1: number = getValueOfKey(data1); // 10

const value2: string = getValueOfKey(data2); // 'John'

const value3: boolean = getValueOfKey(data3); // true

在上面的例子中,我们定义了一个泛型类型ValueOfKey,它接受一个Data类型的泛型参数T,并使用了T['key']来获取key属性的值的类型。然后,我们使用T[T['key']]来获取其他属性的值的类型,即根据key属性的值来获取其他属性的类型。

在示例代码中,我们定义了三个Data类型的变量data1data2data3,它们的key属性的值分别为'value''name''isMale'。然后,我们使用getValueOfKey函数来获取这些变量的value属性的值的类型,并将其赋值给相应的变量value1value2value3

通过使用Keyof推断字符串当键只是一个字符串时的数字,我们可以更方便地根据对象的属性名来获取对应的属性值的类型,无论属性名是一个已知的字符串还是一个动态的字符串。这在编写泛型代码时非常有用,可以提高代码的灵活性和可复用性。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号