首页 > 其他分享 >TavaScript中的keyof

TavaScript中的keyof

时间:2024-03-12 18:45:12浏览次数:28  
标签:getProperty name age person keyof address TavaScript

在 TypeScript 中,keyof 是一个用于获取对象类型的键集合的操作符。它返回一个字符串或数字的联合类型,包含对象类型的所有可用键。keyof 主要用于在编译时进行类型检查,以确保你访问的属性是对象实际拥有的键。

interface Person {
  name: string;
  age: number;
  address: {
    city: string;
    postalCode: string;
  };
}

type PersonKeys = keyof Person;
// PersonKeys 的类型是 "name" | "age" | "address"

在上述示例中,PersonKeysPerson 接口的所有键的联合类型。这意味着 PersonKeys 可以是 "name"、"age" 或 "address" 中的任意一个。

一、基本使用

用keyof组成一个联合类型,来定义函数,以确保传入的参数是对象的合法键。

function getProperty(obj: Person, key: keyof Person) {
  return obj[key];
}

const person: Person = {
  name: "John",
  age: 30,
  address: {
    city: "New York",
    postalCode: "10001",
  },
};

console.log(getProperty(person, "name")); // 输出: "John"
console.log(getProperty(person, "age")); // 输出: 30
console.log(getProperty(person, "address")); // 输出: { city: "New York", postalCode: "10001" }

二、keyof和Typeof一起使用 :

在 TypeScript 中,typeofkeyof 通常一起使用,用于获取对象的属性名(键)的联合类型。这在创建通用函数或操作对象属性时非常有用。

const person = {
  name: "John",
  age: 30,
  address: {
    city: "New York",
    postalCode: "10001",
  },
};

type PersonKeyType = keyof typeof person;

// PersonKeyType 的类型是 "name" | "age" | "address"

在上面的例子中,我们先用typeof把对象的所有属性和属性类型都获取到了,再用keyof把对象属性组成了一个联合类型,它包括了顶层属性 "name""age",以及嵌套对象 address 的属性 "city""postalCode"

使用 keyof 限制函数参数

function getProperty(obj: typeof person, key: keyof typeof person) {
  return obj[key];
}

const personName = getProperty(person, "name"); // 类型是 string
const personAge = getProperty(person, "age");   // 类型是 number
const city = getProperty(person.address, "city"); // 类型是 string

这个函数 getProperty 接受一个对象和一个属性名,利用 keyof typeof 来限制属性名的合法性,并返回属性对应的值。

keyoftypeof 的结合使用提供了更好的类型安全,因为它们反映了对象的实际结构。

标签:getProperty,name,age,person,keyof,address,TavaScript
From: https://www.cnblogs.com/zimengxiyu/p/18068993

相关文章

  • TavaScript中的typeof
    在JavaScript中,typeof是一个运算符,用于获取一个值的类型。它返回一个字符串,表示值的数据类型。typeof主要用于检测基本数据类型,如number、string、boolean、undefined、object、function和es6新增symbol类型。letx=10;console.log(typeofx);//输出:"number"lety......
  • keyof和typeof的区别,连起来用会怎么样
    keyof和typeof是TypeScript中的两个操作符,它们分别用于从类型中提取键和获取变量的类型。keyofT:用于获取类型T的所有键的联合类型。也就是说,keyofT将返回一个包含类型T中所有属性名的联合类型。typeofx:用于获取变量x的类型。它会返回变量x的类型,包括基本类......
  • TypeScript keyof
    keyof是TypeScript中的一个关键字,用于获取一个类型的所有键(属性名)构成的联合类型。它主要用于在类型系统中引用对象类型的键。以下是一些keyof的用法和示例:1.获取对象类型的键:typePerson={name:string;age:number;};typeKeysOfPerson=keyofPerson;/......
  • ts的keyof
    keyof 是TypeScript中的一种类型操作符,用于获取一个类型的所有键(属性名)作为联合类型。它的语法如下:typeKeysOfType=keyofObjectType;其中:keyof 是TypeScript的关键字,用于指定要获取键的类型操作。ObjectType 是你想要获取键的对象类型。这将返回一个联合类型,包......
  • TypeScript中的keyof和in
    keyof使用keyof操作符接受一个对象类型作为参数,返回该对象属性名组成的字面量联合typeDog={name:string;age:number;};typeD=keyofDog;//typeD="name"|"age"可以看到keyofany返回的是一个联合类型:string|number|symbol,结合前文说到keyof是为了取得......
  • [Typescript] Default value for Builder pattern - 04 (keyof {} -> never)
    Frompreviouspost,Builderpattern-03Ifwedothefollowingchanges:-classTypeSafeStringMap<TMapextendsRecord<string,string>={}>{+classTypeSafe......
  • ts基本类型 typeof 和keyof
    安装编译ts的工具安装命令:npmi-gtypescript 或者 yarnglobaladdtypescript。验证是否安装成功:tsc–v(查看TypeScript的版本)。编译并运行TS代码创建 hel......