javascript技巧

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript技巧 > Typescript中interface和type区别

解读Typescript中interface和type的用法及区别

作者:¢C-TiAmo

在TypeScript中,`interface`和`type`都可以用来定义自定义类型,但它们在语法、声明合并、可扩展性、兼容性、类型注解和类型别名、访问修饰符、联合类型与交叉类型、实现接口和类型别名、映射类型、泛型参数位置、扩展对象类型以及调用签名和构造函数等方面存在一些差异

Typescript中interface和type区别

在typeScript中,“interface”和“type”都是用来定义自定义类型的关键字,他们在以下差异,用法上的一些区别(欢迎大家继续补充……)

1. 语法差异

2.声明合并(Merging)的能力

3.可扩展性

4.兼容性

5.类型注解和类型别名

6.访问修饰符

7.联合类型与交叉类型

8.实现接口和类型别名

9.映射类型

type Options<T> = {
  [K in keyof T]: boolean;
};

interface PersonOptions {
  name: boolean;
  age: boolean;
}

// 使用映射类型
type Result = Options<PersonOptions>;
// Result 的类型为 { name: boolean, age: boolean }

// 不能使用映射类型
// interface ResultInterface extends Options<PersonOptions> {}

10.范型参数位置

type Tuple = [number, string];

type NumberArray = Array<number>;

type Union = number | string;

// 有效的定义
type MyType<T> = { value: T };
type MyType2 = MyType<number>;

// 有效的定义
interface MyInterface<T> {
  value: T;
}
type MyInterface2 = MyInterface<number>;

// 无效的定义
// interface MyInterface<T> {
//   value: T;
// }
// interface MyInterface2 extends MyInterface<number> {}

11.扩展对象类型

interface Person {
  name: string;
}

interface ExtendedPerson extends Person {
  age: number;
}

// 使用声明合并进行扩展
const person: ExtendedPerson = {
  name: 'John',
  age: 25,
};

type Person = {
  name: string;
};

type ExtendedPerson = Person & {
  age: number;
};

// 使用交叉类型进行扩展
const person: ExtendedPerson = {
  name: 'John',
  age: 25,
};

12.调用签名和构造函数

interface Greeting {
  (name: string): string;
}

interface Person {
  new (name: string): Person;
  name: string;
  sayHello(): void;
}

// 定义调用签名和构造函数签名
const greeting: Greeting = (name) => `Hello, ${name}!`;

class PersonClass implements Person {
  constructor(public name: string) {}
  sayHello() {
    console.log(`Hello, my name is ${this.name}.`);
  }
}

type Greeting = (name: string) => string;

type Person = {
  new (name: string): Person;
  name: string;
  sayHello(): void;
};

// 使用类型别名
const greeting: Greeting = (name) => `Hello, ${name}!`;

class PersonClass implements Person {
  constructor(public name: string) {}
  sayHello() {
    console.log(`Hello, my name is ${this.name}.`);
  }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文