ts中获取interface的所有键名
时间: 2023-05-28 18:07:44 浏览: 55
可以使用`keyof`关键字来获取interface的所有键名。例如:
```typescript
interface Person {
name: string;
age: number;
gender: 'male' | 'female';
}
type PersonKeys = keyof Person;
// 等价于 type PersonKeys = 'name' | 'age' | 'gender'
function getProperty(obj: Person, key: PersonKeys) {
return obj[key];
}
const person: Person = {
name: 'Tom',
age: 18,
gender: 'male',
};
getProperty(person, 'name'); // 'Tom'
getProperty(person, 'age'); // 18
getProperty(person, 'gender'); // 'male'
```
在上面的例子中,我们使用`keyof`关键字定义了一个`PersonKeys`类型,它等价于`'name' | 'age' | 'gender'`。然后我们使用`PersonKeys`作为函数`getProperty`的第二个参数类型,来限制只能传入`Person`的键名作为参数。
这样就可以在`getProperty`函数中使用`key`参数来获取`obj`对象的对应属性值了。
相关问题
ts 获取接口的所有属性名
你可以使用 TypeScript 的反射 API 来获取接口的所有属性名。具体来说,你可以使用 `keyof` 操作符来获取接口的所有属性名,然后使用 `type` 操作符来获取属性的类型。以下是一个示例代码:
```typescript
interface MyInterface {
name: string;
age: number;
}
type MyInterfaceKeys = keyof MyInterface;
const keys: MyInterfaceKeys[] = ['name', 'age'];
keys.forEach((key) => {
const typeOfKey: string = typeof key;
console.log(`${key}: ${typeOfKey}`);
});
```
在上面的代码中,我们首先定义了一个名为 `MyInterface` 的接口,它有两个属性:`name` 和 `age`。然后,我们使用 `keyof MyInterface` 来获取接口的所有属性名,并将它们存储在 `MyInterfaceKeys` 类型中。接下来,我们定义了一个 `keys` 数组,它包含了所有的属性名。最后,我们遍历了 `keys` 数组,并使用 `typeof` 操作符获取每个属性名的类型,并输出到控制台中。
这样,你就可以获取到接口的所有属性名了。
TS中interface检测逻辑
在TypeScript中,interface用于定义对象的类型。当使用该对象时,编译器会对其进行类型检查,以确保该对象符合所定义的接口。以下是TS中interface检测逻辑:
1. 检查对象是否存在所有必需属性
如果接口中定义了必需属性,则在使用该对象时,编译器将检查该对象是否具有这些属性。如果缺少某些必需属性,编译器将生成错误消息。
2. 检查对象的属性类型
如果接口中定义了属性类型,则在使用该对象时,编译器将检查该对象的属性是否符合所定义的类型。如果属性类型不匹配,编译器将生成错误消息。
3. 检查对象的可选属性
如果接口中定义了可选属性,则在使用该对象时,编译器将检查该对象是否具有这些属性。如果缺少某些可选属性,编译器将不会生成错误消息。
4. 检查对象的额外属性
如果接口中没有定义所有属性,则在使用该对象时,编译器将检查该对象是否具有额外属性。如果对象具有额外属性,则编译器将生成错误消息。可以通过使用索引签名来允许对象具有额外属性。
总之,TS中的interface检测逻辑主要包括检查必需属性、属性类型、可选属性和额外属性等方面。通过使用接口,可以在编译时捕获类型错误,提高代码的可靠性。