当前位置:网站首页 > Python编程 > 正文

分析泛型类,泛型接口,泛型方法的特点_python编程代码大全

本篇文章简要介绍TypeScript中泛型接口和实现。还是以代码为主,以便能动手实践。

若你需系统的学习TypeScript编程,详见《TypeScript编程:高效入门实战》

作为JavaScript超集的TypeScript,其接口像类一样,接口也可以接收多态参数(即泛型)。

1. 接口上声明泛型参数

示例代码如下:

interface IStatus<U> {     code: U; }   interface IEvents<T> {     list: T[];     emit(event: T): void;     getAll(): T[]; }

注意其实现形式,即在名称后的一对尖括号中指定泛型指示符,如何T,U等,而这正是泛型参数。

2. 实现泛型接口

我们来创建一个简单的类来实现IEvents接口。示例如下:

class State<T> implements IEvents<T> {     list: T[];     constructor() {         this.list = [];     }     emit(event: T): void {         this.list.push(event);     }     getAll(): T[] {         return this.list;     } }

让我们来创建State类的一些实例。

示例中,State类将使用IStatus<T>处理一个通用状态。同样的方式,接口IEvent也将处理IStatus<T>。示例如下:

const s = new State<IStatus<number>>(); // 下列代码中 'code' 属性应该是数字, 因此: s.emit({ code: 200 }); // works s.emit({ code: '500' }); // 此行代码错误-类型 s.getAll().forEach(event => console.log(event.code));

这里我们的State类的类型是IStatus<number>。

我们再换一种泛型类型,如下:

interface Code{     message:string;     status:number; }   const s2 = new State<IStatus<Code>>(); //以Code类型发出数据  s2.emit({ code: { message: 'OK', status: 200 } }); s2.getAll().map(event => event.code).forEach(event => {     console.log(event.message);     console.log(event.status); });

这里我们的State类的被类型化为IStatus<Code>。通过这种方式,我们可以将更复杂的类型传递给emit方法。

如前所见,泛型接口对于静态类型的编码来说是非常有用的工具。

希望系统学习TypeScript编程,请从这里开始:《TypeScript编程:高效入门实战》

本篇就写这些了,后续还将会有泛型的后面。记得点个赞,分享出去吧。可以点击右上角的关注,以便随时来@牛旦IT课堂回看或阅读。谢谢啦,再见!

到此这篇分析泛型类,泛型接口,泛型方法的特点_python编程代码大全的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 零基础编程入门教程_python编程入门2024-11-21 18:00:05
  • PHP编程_网络爬虫python代码2024-11-21 18:00:05
  • PHP编程_python流程图生成器2024-11-21 18:00:05
  • PHP编程_网络爬虫python代码2024-11-21 18:00:05
  • python ruby区别_python越学越难2024-11-21 18:00:05
  • 谷歌编程网站_python开发工具2024-11-21 18:00:05
  • iterator泛型_python编译软件2024-11-21 18:00:05
  • matlab代码转为python_matlab可以运行python吗2024-11-21 18:00:05
  • Perl 的简介_perl python2024-11-21 18:00:05
  • scala编程基础和scala编程技术_scala和python2024-11-21 18:00:05
  • 全屏图片