国庆假期结束了,其实在这里实习对我而言还算是比较轻松愉快的,虽然完成任务过程中出现的问题层出不穷,但也被克服问题的成就感包裹着,感觉每天在办公室就像在上自习一样。加油啦小荷!
自从把example运行成功后接下来的任务就明晰一点了,首先要完成的是学会Node.js & Typescript这个语言,我决定从头学起,这个语言是一门类C语言,所以语法方面会有很多的相似点。所以给自己打打气!肯定行哒!加油加油!~
首先我看了Typescript的声明文件,学习了一些基础语句的表示方法(但暂时没有学到逻辑)链接如下:
一、认识Typescript
二、Typescript基础知识
三、Typescript高级的类型与技术
四、TypeScript 工程化的最佳实践
(真的非常牛逼!一定要去看!!!)
主要学到的语法有:
一,原始数据类型
- 布尔值
是最基础的数据类型,在 TypeScript 中,使用 boolean 定义布尔值类型:
let isDone: boolean = false;
// 编译通过
// 后面约定,未强调编译错误的代码片段,默认为编译通过
- 数值
使用 number 定义数值类型:
let decLiteral: number = 6;
let hexLiteral: number = 0xf00d;
// ES6 中的二进制表示法
let binaryLiteral: number = 0b1010;
// ES6 中的八进制表示法
let octalLiteral: number = 0o744;
let notANumber: number = NaN;
let infinityNumber: number = Infinity;
- 字符串
使用 string 定义字符串类型:
let myName: string = 'Tom';
let myAge: number = 25;
// 模板字符串
let sentence: string = `Hello, my name is ${myName}.
I'll be ${myAge + 1} years old next month.`;
- 空值
JavaScript 没有空值(Void)的概念,在 TypeScript 中,可以用 void 表示没有任何返回值的函数:
function alertName(): void {
alert('My name is Tom');
}
声明一个 void 类型的变量没有什么用,因为你只能将它赋值为 undefined 和 null。
在 TypeScript 中,可以使用 null 和 undefined 来定义这两个原始数据类型:
let u: undefined = undefined;
let n: null = null;
与 void 的区别是,undefined 和 null 是所有类型的子类型。也就是说 undefined 类型的变量,可以赋值给 number 类型的变量:
// 这样不会报错
let num: number = undefined;
// 这样也不会报错
let u: undefined;
let num: number = u;
而 void 类型的变量不能赋值给 number 类型的变量:
let u: void;
let num: number = u;
// Type 'void' is not assignable to type 'number'.
二、任意值
任意值(Any)用来表示允许赋值为任意类型。
如果是一个普通类型,在赋值过程中改变类型是不被允许的,但如果是 any 类型,则允许被赋值为任意类型。
let myFavoriteNumber: any = 'seven';
myFavoriteNumber = 7;
如上代码就被反复赋值,第一次是字符串类型,第二次是数字类型。
三、类型推论
TypeScript 会在没有明确的指定类型的时候推测出一个类型,这就是类型推论。如果定义的时候没有赋值,不管之后有没有赋值,都会被推断成 any 类型而完全不被类型检查:
let myFavoriteNumber;
myFavoriteNumber = 'seven';
myFavoriteNumber = 7;
四、联合类型
联合类型(Union Types)表示取值可以为多种类型中的一种。
let myFavoriteNumber: string | number;
myFavoriteNumber = 'seven';
myFavoriteNumber = 7;
联合类型使用 | 分隔每个类型。
这里的 let myFavoriteNumber: string | number 的含义是,允许 myFavoriteNumber 的类型是 string 或者 number,但是不能是其他类型。
let myFavoriteNumber: string | number;
myFavoriteNumber = true;
// index.ts(2,1): error TS2322: Type 'boolean' is not assignable to type 'string | number'.
// Type 'boolean' is not assignable to type 'number'.
五、对象的类型——接口
在 TypeScript 中,我们使用接口(Interfaces)来定义对象的类型。
什么是接口?
在面向对象语言中,接口(Interfaces)是一个很重要的概念,它是对行为的抽象,而具体如何行动需要由类(classes)去实现(implement)。
TypeScript 中的接口是一个非常灵活的概念,除了可用于对类的一部分行为进行抽象以外,也常用于对「对象的形状(Shape)」进行描述。
interface Person {
name: string;
age: number;
}
let tom: Person = {
name: 'Tom',
age: 25
};
上面的例子中,我们定义了一个接口 Person,接着定义了一个变量 tom,它的类型是 Person。这样,我们就约束了 tom 的形状必须和接口 Person 一致。
接口一般首字母大写。有的编程语言中会建议接口的名称加上 I 前缀。
定义的变量比接口多一些和少一些属性都是不允许的:
interface Person {
name: string;
age: number;
}
let tom: Person = {
name: 'Tom'
};
// index.ts(6,5): error TS2322: Type '{ name: string; }' is not assignable to type 'Person'.
// Property 'age' is missing in type '{ name: string; }'.
接口详解(这章真的超级牛逼!!一定要认真看!)
完蛋,越看越看不懂了:
带大家共同鉴赏一下计算机绕口令,我念了好几遍才懂:
- 一旦定义了任意属性,那么确定属性和可选属性的类型都必须是它的类型的子集:
- 只读的约束存在于第一次给对象赋值的时候,而不是第一次给只读属性赋值的时候:
- 采用函数表达式|接口定义函数的方式时,对等号左侧进行类型限制,可以保证以后对函数名赋值时保证参数个数、参数类型、返回值类型不变。
今晚吧所有基础的Node.js & Typescript基本语法看完了,但是主要就是了解一些基本的词汇以及词汇的用法与限制,但是还没有看到Node.js & Typescript的逻辑,所以明天的安排就是看Node.js & Typescript语法逻辑。
现在归类整理一下博客案例中一些有用的语句:
let (变量) :(类型) = (所赋的值);
let decLiteral: number = 6;
定义一个名叫decLiteral,number类型,值为6的变量.
let myName: string = 'Tom';
定义一个名叫myName,string类型,值为Tom的变量.
let myFavoriteNumber: any = 'seven';
定义一个名叫myFavoriteNumber,any(任意)类型,值为seven的变量.
-
var 定义全局变量
-
let (变量): (类型一) | (类型二);
let myFavoriteNumber: string | number;
定义一个名叫myFavoriteNumber,类型为string或者number的变量
interface 接口名称 { 名字一: 类型一; 名字二: 类型二; }
interface Person {
name: string;
age: number;
}
定义一个名叫Person的接口,接口中有名叫name类型为string的变量以及名叫age类型为number的变量。