从Java语法重写为Type语法有两个关键点。 一是需要声明类成员变量(Field),二是必须为各种事物(变量、参数、函数/方法等)声明类型。 而这两点直接引出了两个关键问题,什么类型? 如何申报?
类型
在讲Type类型之前,我们先来准备一下Java的七种类型:
这七种类型都可以通过 typeof 运算符来计算,但是其中没有 Array、null、Date 等常见类型——因为它们看起来都是对象。
Type 的重要特征之一是类型,因此 Type 中的类型更加具体。 除了Java中的类型之外,还定义了一些其他类型(不完全列表)
具体类型这里不再解释。 官方手册的基本类型、接口、类、枚举和高级类型部分都非常清楚。
不过,还有一个与类型相关的特性不得不提——泛型。 如果只讲数据类型,纯JSers还是能理解的,毕竟类型并不新鲜,只是对类型进行了扩展。 但纯 JSers 可能没有子类的概念。
泛型主要使用符号来表示某些类型。 只要是满足约束的类型(默认是无约束的),这个类型符号就可以被替换使用,比如
功能测试(v:T){
控制台.log(v);
test(true);//显式指定T替换为boolean
test("hello");// 推断(隐式)T 被字符串替换
test(123);//推断(隐式)T被数字替换
泛型与强类型有关,即需要严格的类型检测,而我想少写类似的代码,所以我干脆用某种符号来代替类型。 泛型这个名字本身可能不太好理解,但是如果借用C++中“模板”的概念,那就很容易理解了。 比如前面的类库函数,根据前面的调用,可以解释为三个函数typescript嵌套类型声明,相当于应用了一个模板typescript嵌套类型声明,将T替换为实际类型:
函数测试(v:布尔值){...}
函数测试(v:字符串){...}
函数测试(v:数字){...}
关于类库,更详细的内容可以参考Handbook的Generic部分。
这就是类型的全部内容。 简单的类型一看就明白。 后面我们会开专题来讲解更高级的类型。 但是,既然选择使用Type,就必然会用到它的静态类型特性,所以一定要加强识别类型的意识,养成这样的习惯。 对于纯粹的 JSer 来说,这是一个巨大的挑战。
申报类型
声明类型主要是指声明变量/常量、函数/方法和类成员的类型。 JS 使用 var 声明变量,ES6 扩展了 let 和 const。 这些声明类型都是支持的。为变量或常量指定类型也很简单,只需在变量/常量名称前面加上引号,然后指定类型即可,例如
// # 类型
// 声明函数pow是number类型,即返回值是number类型
// 声明参数 n 为 number 类型
函数pow(n:数字):数字 {
返回n*n;
// 声明测试没有返回值
函数测试():无效{
for(leti:数字=0;i
发表评论