接口
在TypeScript中,接口(Interfaces)提供了一种定义类型的契约方式,包括一组属性、方法和事件。它用于强制规定对象、类或函数参数的结构。接口不会被转译成JavaScript代码,仅在TypeScript的编译时用于类型检查。
以下是在TypeScript中定义和使用接口的示例:
interface User {
name: string;
age: number;
}
const user: User = {
name: 'John Doe',
age: 30,
};
在这个示例中,User接口定义了user对象的结构,具有两个属性,name和age。然后,对象被类型化为User,使用了类型断言:User。这有助于TypeScript进行类型检查。
Types vs Interfaces
在TypeScript中,类型(Types)和接口(Interfaces)都可以用于定义对象的结构并强制类型检查。但是,它们之间存在一些区别。
类型(Types)用于基于现有类型创建新的命名类型或将现有类型组合成新类型。可以使用type关键字创建类型。例如:
type Person = {
name: string;
age: number;
};
const person: Person = {
name: 'John Doe',
age: 30,
};
而接口(Interfaces)用于描述对象和类的结构。可以使用interface关键字创建接口。例如:
interface Person {
name: string;
age: number;
}
const person: Person = {
name: 'John Doe',
age: 30,
};
类型别名(Type aliases)和接口(Interfaces)非常相似,而且在许多情况下,您可以自由选择它们之间的使用。接口的几乎所有特性在类型中都是可用的,关键区别在于类型无法重新打开以添加新属性,而接口始终是可扩展的。
拓展接口
interface Animal {
name: string;
}
interface Bear extends Animal {
honey: boolean;
}
const bear = getBear();
bear.name;
bear.honey;
通过交集扩展类型
type Animal = {
name: string;
}
type Bear = Animal & {
honey: boolean;
}
const bear = getBear();
bear.name;
bear.honey;
向现有接口添加新字段:
interface Window {
title: string;
}
interface Window {
ts: TypeScriptAPI;
}
const src = 'const a = "Hello World"';
window.ts.transpileModule(src, {});
类型在创建后无法更改
type Window = {
title: string;
}
type Window = {
ts: TypeScriptAPI;
}
// 错误:重复的标识符 'Window'。
Extends - 继承
在 TypeScript 中,您可以通过使用 "extends" 关键字创建一个新接口,该接口继承自原始接口,从而扩展接口。新接口可以包含额外的属性、方法或重新定义原始接口的成员。
interface Shape {
width: number;
height: number;
}
interface Square extends Shape {
sideLength: number;
}
let square: Square = {
width: 10,
height: 10,
sideLength: 10,
};
在此示例中,Square
接口扩展了 Shape
接口,并添加了一个额外的属性 sideLength
。类型为 Square
的变量必须具有 Shape
和 Square
接口中定义的所有属性。这意味着 square
变量必须具有 width
、height
和 sideLength
属性。
接口声明
在 TypeScript 中,接口是用于创建具有特定结构的对象的蓝图。接口定义了一个类或对象必须实现的一组属性、方法和事件。接口是对象和类之间的契约,可用于强制代码中对象的特定结构。
以下是在 TypeScript 中声明接口的示例:
interface Person {
firstName: string;
lastName: string;
age?: number;
getFullName(): string;
}
在此示例中,Person
接口定义了四个属性:firstName
、lastName
、age
和一个名为 getFullName()
的方法。age
属性是可选的,由 ?
符号表示。实现 Person
接口的任何类或对象必须具有这些属性和方法。
混合类型
在 TypeScript 中,混合类型是一种将多个类型组合成单一类型的方式。结果类型被视为这些类型的联合。这允许您指定一个值可以具有多个类型,而不仅仅是一个类型。
例如,您可以创建一个混合类型,它可以接受字符串或数字:
type StringOrNumber = string | number;
您还可以使用混合类型来创建更复杂的类型,可以表示多种不同类型的值的组合。例如
type Education = {
degree: string;
school: string;
year: number;
};
type User = {
name: string;
age: number;
email: string;
education: Education;
};
在上述示例中,StringOrNumber
是一个可以是字符串或数字的混合类型,而 User
是一个更复杂的混合类型,它包括多种不同类型的属性。这使得在 TypeScript 中可以更灵活地表示多样化的数据结构。