码迷,mamicode.com
首页 > 其他好文 > 详细

转职成为TypeScript程序员的参考手册(四)

时间:2016-02-25 19:48:47      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

泛型

对c#程序员来说,TypeScript的泛型很熟悉,基本上是一致的设计。

技术分享

类型约束

C#使用where关键字标记类型约束,TypeScript在尖括号内使用extends关键字,效果相同。

下面的例子中IExample约束了泛型必须是IMyInterface和他的派生类。

技术分享

如果像下图这样用的话,就能约束为同时继承ClassOne和ClassTwo的类型。很费解吧,请特别注意

这是因为本质上TypeScript的类型系统并不那么严格,下面的章节会详细解释TypeScript的类型系统

技术分享

你也可以使用泛型作为泛型的类型约束,如下

技术分享

技术分享

结构类型

C#的类型系统是强制标记的,对象的类型必须显示声明。即使两个类型拥有完全相同的结构,他们也不是相同的类型。

TypeScript的类型系统是结构上的,建筑结构,层次型的。结构相同的类型即可认为是同一类型。

下面是C#中的一个例子

技术分享

ClassA ClassB是完全不同的类型,他们之间是不同的,必须显示继承接口才能让他们兼容。

而在TypeScript中不是这样,我们用如下的例子来证明。ClassA ClassB ExampleC 拥有签名一致的函数,所以他们就可以兼容。

技术分享

TypeScript的结构类型系统意味着你在c#中的观念不再成立,class name不是关键。这需要我们写代码的时候时刻注意。

这玩意会让代码千变万化,如果你熟悉C#或者JAVA,这可能会让你困惑。

?

看下面的例子,不需要class关键字,也会实实在在的产生类型。

技术分享

在这个例子中,会产生一个匿名的类型

技术分享

这个匿名的类型可以让开发工具提供自动完成功能,编译器也会检查。如果你尝试将objA的name赋值一个数值,编译器会检查到告诉你错误。编译器还会为数组推断类型。

访问修饰器

TypeScript的访问修饰器可能会给你一种弱小的感觉,的确如此。他仅仅是一个编译时功能。

模块中的一切均为私有,除非加上export关键字。没有export关键字的类型仅能在模块内实用。

类的内部,一切均为公开,除非加上private 关键字。public只是为了看起来意图明确。

TypeScript的访问修饰器就是这样而已,没有c#的 internal 和 protected这种修饰器,想要c#类似的功能就放弃吧。

转职成为TypeScript程序员的参考手册(四)

标签:

原文地址:http://www.cnblogs.com/crazylights/p/5218080.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!