持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第12天,点击查看活动详情
今天学习的内容是 Typescript 的开发环境搭建和变量声明的方式,以及基本的数据类型。
环境安装
1.安装 Nodejs
2.安装 typescript:
npm install -g typescript
3.打开命令行窗口,检验安装是否成功:
tsc -v
能打印出版本号,说明安装成功。
Typescript 的 Hello,world
新建一个 index.ts 文件,输入以下内容:
let message = "Hello, world!";
console.log(message);
打开命令行工具,使用 tsc 进行编译:
tsc index.ts
会在当前目录下生成一个 index.js 文件,使用 node 去执行它:
node index.js
命令行终端会打印出:Hello,world!
Typescript 工作流
Javascript 可以运行在浏览器和 Node 环境中。Typescript 是 Javascript 的超集,不能直接运行在浏览器中,需要经过编译器,转译成浏览器能识别的 JS 代码,才能运行。
比如上面编写的 index.ts,经过 tsc 命令编译为普通的 js 文件,就可以被 Node 执行,或者在浏览器中运行。
变量声明
Typescript 声明变量的方式和 JavaScript 保持一致,都是使用 var,let 和 const 关键字。
随着 ES6+ 语法的普及,现在更推荐使用 let 来声明一个变量,使用 const 声明一个常量。这也是 TS 官方文档明确说明的一条建议,在任何情况下都要避免使用 var。
ES6 之前的JS 中的作用域以前只有全局作用域和函数作用域。最基本的代码块是没有作用域的。甚至可以使用 var 无限次声明同一个变量,这在任何语言中都是一个非常危险的 操作。
下面示例中函数执行,会在 for 循环结束之后打印出 i ,这说明 i 是没有块级作用域的。
function sum() {
for(var i=0; i<5; i++) {
console.log(i)
}
console.log('final i:', i)
}
sum()
使用 let 声明变量,是对 var 的一个“修补”,同一个变量只能声明一次,在声明之前不能被访问,且具备块级作用域。
下面示例中的函数执行,会报错,因为 let 声明的变量具备块级作用域,i 只在 for 循环中有用。
function sum() {
for(let i=0; i<5; i++) {
console.log(i)
}
console.log('final i:', i)
}
sum()
使用 const 声明常量,之后常量就不能被重新赋值了。
const NAME = "kw";
// 报错:Cannot assign to 'NAME' because it is a constant.
NAME = 'kw2';
Typescript 基本类型
Typescritp 是一种强类型语言,增加了 JS 的类型能力,不仅扩展了类型,还允许开发者自定义类型。最重要的是,通过类型能提高代码质量,增强程序的安全性。
TS 中的基础类型有:
- JS 中的数据类型:number、string、boolean、null、undefined、array、object
- TS 扩展的数据类型:tuple、void、never、any
TS 高级类型:
- union 组合类型
- Nullable 可空类型
- Literal 预定义文件类型
数字类型
TS 中的数字类型不区分整数和浮点数,也不区分正数和复数,用 number 表示。
TS 具备类型推断的能力,会根据值自动推导出类型。
let num1 = 10;
let num2: number = 20;
字符串类型
TS 中的字符串类型为 string,内容使用双引号 ""、单引号 '' 和 反引号 `` 引导。
let name = "kw";
let message: string = 'hello';
布尔类型
布尔类型使用 boolean 表示,用来表示真假,只有两个值 true 和 false。
let flag = true;
let condition: boolean = false;
使用类型能力
有一个函数,用于两个参数的相加:
function add(num1, num2) {
return num1 + num2;
}
sum(10, 20); // 30
如果函数调用时,参数没有传数字类型,而是传了字符串类型,结果就可能不符合我们的预期:
sum(10, '20'); // 1020
由于 JS 是动态类型语言,这并不会报错,只有代码运行时才能发现。
所以可以引入 TS 的类型检查,来规避这种错误:
function add(num1: number, num2: number) {
return num1 + num2;
}
这样,在编码的时候,TS 就能给出类型提示,防止出错。这就是 TS 的好处,帮助在开发时快速准确定位出问题,避免很多由于粗心导致的错误。
变量的类型一旦确定,就不能再修改,否则会报错:
let flag = true;
flag = 'true';
TS 会提示:不能将类型“string”分配给类型“boolean”。
小结
本文介绍了 Typescript 环境的搭建,以及 TypeScript 中声明变量的方式,和 JS 大差不离,主要是多了类型注解。最后介绍了几种基本数据类型,包括数字、字符串和布尔类型。