typescript 类型保护与区分类型 联合类型 交叉类型 类型别名 接口 vs. 类型别名 字符串字面量类型
时间: 2023-09-07 12:13:41 浏览: 126
好的,让我来回答你的问题。
1. TypeScript 的类型保护与区分类型
类型保护是 TypeScript 中用来区分不同类型的机制,可以通过 typeof、instanceof、in 等运算符来实现。例如:
```typescript
function printLength(strOrArr: string | any[]) {
if (typeof strOrArr === 'string') {
console.log(strOrArr.length); // string类型
} else {
console.log(strOrArr.length); // 数组类型
}
}
```
2. TypeScript 的联合类型
联合类型是指变量可以是多种不同类型之一,可以使用“|”符号将多个类型组合起来。例如:
```typescript
let numOrStr: number | string = 5;
numOrStr = "hello";
```
3. TypeScript 的交叉类型
交叉类型是指将多个类型合并成一个类型,可以使用“&”符号将多个类型组合起来。例如:
```typescript
interface A {
a: number;
}
interface B {
b: string;
}
type C = A & B;
const c: C = { a: 1, b: "hello" };
```
4. TypeScript 的类型别名
类型别名是为一个类型定义一个别名,可以使用“type”关键字来定义。例如:
```typescript
type MyString = string;
const str: MyString = "hello";
```
5. TypeScript 的接口 vs. 类型别名
接口和类型别名都可以用来定义类型,但有一些不同之处。接口可以被类实现,也可以被扩展,而类型别名只能定义别名。例如:
```typescript
interface Person {
name: string;
age: number;
}
type PersonAlias = {
name: string;
age: number;
};
class Student implements Person {
name: string;
age: number;
grade: number;
constructor(name: string, age: number, grade: number) {
this.name = name;
this.age = age;
this.grade = grade;
}
}
type StudentAlias = PersonAlias & {
grade: number;
};
const student: StudentAlias = { name: "Tom", age: 18, grade: 3 };
```
6. TypeScript 的字符串字面量类型
字符串字面量类型是指将字符串字面量作为类型,可以使用“|”符号将多个字符串字面量组合起来。例如:
```typescript
type Gender = "male" | "female";
interface Person {
name: string;
age: number;
gender: Gender;
}
const person: Person = { name: "Tom", age: 18, gender: "male" };
```
希望这些解释能够对你有所帮助。如果你还有其他问题,可以继续提问。
阅读全文