typescript判断对象类型
时间: 2024-06-16 09:04:17 浏览: 192
在TypeScript中,可以使用类型断言和类型保护来判断对象的类型。
1. 类型断言(Type Assertion):
类型断言是一种告诉编译器某个值的具体类型的方式。可以使用尖括号语法或者as关键字进行类型断言。
例如:
```typescript
let obj: any = "hello";
let strLength: number = (<string>obj).length; // 使用尖括号语法进行类型断言
let strLength: number = (obj as string).length; // 使用as关键字进行类型断言
```
2. 类型保护(Type Guard):
类型保护是一种在特定范围内缩小变量的类型的方式,以便在该范围内使用特定类型的属性和方法。
TypeScript提供了多种类型保护的方式,包括typeof类型保护、instanceof类型保护和自定义类型保护。
- typeof类型保护:
可以使用typeof操作符来判断基本类型的变量类型。
例如:
```typescript
function printLength(obj: string | number) {
if (typeof obj === "string") {
console.log(obj.length); // 在这个范围内,obj被缩小为string类型
} else {
console.log(obj); // 在这个范围内,obj被缩小为number类型
}
}
```
- instanceof类型保护:
可以使用instanceof操作符来判断对象的具体类型。
例如:
```typescript
class Animal {
name: string;
constructor(name: string) {
this.name = name;
}
}
class Dog extends Animal {
breed: string;
constructor(name: string, breed: string) {
super(name);
this.breed = breed;
}
}
function printName(animal: Animal) {
if (animal instanceof Dog) {
console.log(animal.breed); // 在这个范围内,animal被缩小为Dog类型
} else {
console.log(animal.name); // 在这个范围内,animal被缩小为Animal类型
}
}
```
- 自定义类型保护:
可以使用自定义的类型保护函数来判断对象的具体类型。
例如:
```typescript
function isString(obj: any): obj is string {
return typeof obj === "string";
}
function printLength(obj: string | number) {
if (isString(obj)) {
console.log(obj.length); // 在这个范围内,obj被缩小为string类型
} else {
console.log(obj); // 在这个范围内,obj被缩小为number类型
}
}
```
阅读全文