typescript keyof
时间: 2023-05-11 19:03:07 浏览: 94
TypeScript 中的 keyof 关键字用于获取一个类型的所有属性名,返回一个字符串字面量类型。例如,如果有一个类型 Person,包含 name 和 age 两个属性,那么 keyof Person 的结果就是 "name" | "age"。
相关问题
typescript keyof的应用场景
TypeScript中的`keyof`关键字用于获取类型的所有键名,常用于以下几个应用场景:
1. **类型断言**: 当你知道某个对象具有的属性名称时,可以使用`keyof`来确保变量或函数参数的类型只包含这些特定的键。例如:
```typescript
const obj = { name: 'John', age: 30 };
type Props = keyof typeof obj; // 此时Props等于"name" | "age"
function logProp(prop: Props) {
console.log(obj[prop]); // 可以保证prop只取obj的有效键值
}
```
2. **泛型约束**: 在编写通用函数或类时,`keyof`可以帮助指定接收对象类型的参数应具有的键。比如:
```typescript
function getValues<T>(obj: T): T[keyof T][] {
return Object.values(obj);
}
```
这里`T[keyof T]`表示返回的是`T`对象的所有键对应的值。
3. **枚举类型**: `keyof`也可以应用于枚举类型,提取出所有枚举成员的名称作为类型:
```typescript
enum Color { Red, Green, Blue }
type ColorKeys = keyof Color; // 类型为"Red" | "Green" | "Blue"
```
typescript这段代码是什么意思type Mutable<T> = { -readonly [P in keyof T]: T[P] };
这段 TypeScript 代码定义了一个名为 `Mutable` 的泛型类型。它表示一种可变的对象(mutable object),其中允许对 `T` 类型的所有可枚举属性(keyof T)进行读写操作。`-readonly` 关键字用于声明只读部分,这意味着在这个 `Mutable` 对象中,你可以修改 `T` 中指定类型的值,但是原始类型本身的键(keys)是不可更改的。
简单来说,这个类型可以让你创建一个可以被修改的新对象结构,它是基于已有类型 `T` 的,但对 `T` 的某些属性做了可写处理。例如,如果你有一个已有的 `Person` 类型:
```typescript
interface Person {
name: string;
age: number;
}
```
你可以用 `Mutable<Person>` 来定义一个可变的人对象:
```typescript
let mutablePerson: Mutable<Person> = {
name: 'Alice',
age: 25,
};
mutablePerson.name = 'Bob'; // 可以修改
mutablePerson.age++; // 可以修改年龄
```
阅读全文