Typescript是JavaScript的超集,是微软开发的一种自由和开源的编程语言。它集合了JavaScript的所有内容并且包含了es6+的一些语法特性,尤其是引入了静态类型检查,可以减少出错,节省时间,提高开发效率。
我最近就学习了一段时间typescript,感觉比javascript好多了,js是在运行时才可以发现错误,而ts在编码过程中就能够发现错误并且及时改正,书写也很方便,现在就学习的知识做一个阶段性的总结,如果不足之处,还请各位大侠多多指正。
首先,练习之前,一定要装好运行环境,这里安装一个全局typescript包就可以了。
npm i -g typescript
然后,一个简单的例子,输出一个欢迎语。
function sayHi (name:string):string {
return `Hi,${name}!`;
}
sayHi('Jake'); // Hi,Jake!
[外链图片转存失败(img-97Z9RF89-1566273540075)(./sayhi.gif)]
最后,运行一下。
tsc --watch say.ts
watch
是监听编码状态,可以实时编译,很方便的。
使用node运行一下就可以看到输出结果了。
node say.js
如果传参不是字符串类型就会报错,在编码的过程中就避免了错误。
这个小节主要简单回顾一下typescript中的这个类型和变量。ts中的基本数据类型有string
,number
,boolean
,tuple
,enum
,any
,void
,null
,undefined
,Array
,Object
等。
声明一个变量的时候,主要是在声明的变量后面加一个冒号,然后指定数据类型,接着写值;如果没有指定数据类型,就按赋给变量的第一个值的类型为准,这里新增的数据类型除了js的六大数据类型外,还有enum(枚举)和tuple(元组)以及any(任何类型)。
let name : string = 'Jake';
let str : string = `hi, ${name}!`;
console.log(str); // hi, Jake!
let numA : number = 0b1010; // 二进制
let numB : number = 0o744; // 八进制
let numC : number = 10; // 十进制
let numD : number = 0xf00d; // 十六进制
console.log(numA, numB, numC, numD); // 10 484 10 61453
let flag : boolean = true;
let numbers : number[] = [1,2,3];
// 或使用泛型
let numbers : Array = [1,2,3];
元组就是用来表示已知数组的元素类型和数量,各个元素类型可以不同,但是对应位置类型必须相同。
let a : [string, number, boolean];
a = ['hi', 10, true];
枚举就为一组值赋予以友好的名字,定义数值集合。
默认从0开始编号,可以自定义。
enum Color { red = 1, green, blue };
let c : Color = Color.red;
console.log(c); // 1
let colorName : string = Color[3];
console.log(colorName); // blue
any表示任意类型,例如:
// 可以是任意类型
let anyVal : any = 1;
console.log(anyVal); // 1
anyVal = 'hi';
console.log(anyVal); // hi
anyVal = true;
console.log(anyVal); // true
void表示空值,与any相反,没有任何类型。
只能赋值undefined或者null,没有多大意义。
let un : void = undefined;
这个是最常见的使用。
function infoTip (): void {
console.log('this is a info!');
}
infoTip(); // this is a info!
这个默认是所有类型的子类型,你可以null或undefined赋值给number类型的变量。
let n : null = null;
let u : undefined = undefined;
never表示永不存在的值的类型,用在抛出错误,是所有类型的子类型,没有类型是never的子类型,any也不能赋值给never。
变量可以是never类型,当他们被永不为真的类型保护时候。
function printErr (msg:string): never {
throw new Error(msg);
}
printErr(`Argument of type '1' is not assignable to parameter of type 'string'.`);
object表示非原始类型,除了基本数据类型的类型。
用它可以表示一个对象,使用对象的方法和属性。
declare function create (obj : Object | null): void;
console.log(create({state: 0})); // ok
今天就总结到这里,下次见,bye!