任意值任意值(Any)用来表示允许赋值为任意类型。
什么是任意值类型如果是一个普通类型,在赋值过程中改变类型是不被允许的:
1234let myFavoriteNumber: string = 'seven';myFavoriteNumber = 7;// index.ts(2,1): error TS2322: Type 'number' is not assignable to type 'string'.
但如果是 any 类型,则允许被赋值为任意类型。
12let myFavoriteNumber: any = 'seven';myFavoriteNumber = 7;
任意值的属性和方法在任意值上访问任何属性都是允许的:
123let anyThing: any = 'hello';console.log(anyThing.myName);console.log(anyThing.myName.firstName);
也允许调用任何方法:
1234let anyThing ...
原始数据类型JavaScript 的类型分为两种:原始数据类型(Primitive data types)和对象类型(Object types)。
原始数据类型包括:布尔值、数值、字符串、null、undefined 以及 ES6 中的新类型 Symbol 和 ES10 中的新类型 BigInt。
本节主要介绍前五种原始数据类型在 TypeScript 中的应用。
布尔值布尔值是最基础的数据类型,在 TypeScript 中,使用 boolean 定义布尔值类型:
1234let isDone: boolean = false;// 编译通过// 后面约定,未强调编译错误的代码片段,默认为编译通过
注意,使用构造函数 Boolean 创造的对象不是布尔值:
1234let createdByNewBoolean: boolean = new Boolean(1);// Type 'Boolean' is not assignable to type 'boolean'.// 'boolean' is a primitiv ...
Hello TypeScript我们从一个简单的例子开始。
将以下代码复制到 hello.ts 中:
123456function sayHello(person: string) { return 'Hello, ' + person;}let user = 'Tom';console.log(sayHello(user));
然后执行
1tsc hello.ts
这时候会生成一个编译好的文件 hello.js:
12345function sayHello(person) { return 'Hello, ' + person;}var user = 'Tom';console.log(sayHello(user));
在 TypeScript 中,我们使用 : 指定变量的类型,: 的前后有没有空格都可以。
上述例子中,我们用 : 指定 person 参数类型为 string。但是编译为 js 之后,并没有什么检查的代码被插入进来。
这是因为 T ...
安装 TypeScriptTypeScript 的命令行工具安装方法如下:
1npm install -g typescript
以上命令会在全局环境下安装 tsc 命令,安装完成之后,我们就可以在任何地方执行 tsc 命令了。
编译一个 TypeScript 文件很简单:
1tsc hello.ts
我们约定使用 TypeScript 编写的文件以 .ts 为后缀,用 TypeScript 编写 React 时,以 .tsx 为后缀。
编辑器TypeScript 最大的优势之一便是增强了编辑器和 IDE 的功能,包括代码补全、接口提示、跳转到定义、重构等。
主流的编辑器都支持 TypeScript,这里我推荐使用 Visual Studio Code。
它是一款开源,跨终端的轻量级编辑器,内置了对 TypeScript 的支持。
另外它本身也是用 TypeScript 编写的。
下载安装:https://code.visualstudio.com/
获取其他编辑器或 IDE 对 TypeScript 的支持:
Sublime Text
WebStorm
Vim
Emacs
Ec ...
什么是 TypeScript
Typed JavaScript at Any Scale.添加了类型系统的 JavaScript,适用于任何规模的项目。
以上描述是官网[1]对于 TypeScript 的定义。
它强调了 TypeScript 的两个最重要的特性——类型系统、适用于任何规模。
TypeScript 的特性类型系统从 TypeScript 的名字就可以看出来,「类型」是其最核心的特性。
我们知道,JavaScript 是一门非常灵活的编程语言:
它没有类型约束,一个变量可能初始化时是字符串,过一会儿又被赋值为数字。
由于隐式类型转换的存在,有的变量的类型很难在运行前就确定。
基于原型的面向对象编程,使得原型上的属性或方法可以在运行时被修改。
函数是 JavaScript 中的一等公民[2],可以赋值给变量,也可以当作参数或返回值。
这种灵活性就像一把双刃剑,一方面使得 JavaScript 蓬勃发展,无所不能,从 2013 年开始就一直蝉联最普遍使用的编程语言排行榜冠军[3];另一方面也使得它的代码质量参差不齐,维护成本高,运行时错误多。
而 TypeScript ...
JavaScript 语言的历史诞生JavaScript 因为互联网而生,紧跟着浏览器的出现而问世。回顾它的历史,就要从浏览器的历史讲起。
1990年底,欧洲核能研究组织(CERN)科学家 Tim Berners-Lee,在全世界最大的电脑网络——互联网的基础上,发明了万维网(World Wide Web),从此可以在网上浏览网页文件。最早的网页只能在操作系统的终端里浏览,也就是说只能使用命令行操作,网页都是在字符窗口中显示,这当然非常不方便。
1992年底,美国国家超级电脑应用中心(NCSA)开始开发一个独立的浏览器,叫做 Mosaic。这是人类历史上第一个浏览器,从此网页可以在图形界面的窗口浏览。
1994年10月,NCSA 的一个主要程序员 Marc Andreessen 联合风险投资家 Jim Clark,成立了 Mosaic 通信公司(Mosaic Communications),不久后改名为 Netscape。这家公司的方向,就是在 Mosaic 的基础上,开发面向普通用户的新一代的浏览器 Netscape Navigator。
1994年12月,Navigator 发布了 ...
导论什么是 JavaScript 语言?JavaScript 是一种轻量级的脚本语言。所谓“脚本语言”(script language),指的是它不具备开发操作系统的能力,而是只用来编写控制其他大型应用程序(比如浏览器)的“脚本”。
JavaScript 也是一种嵌入式(embedded)语言。它本身提供的核心语法不算很多,只能用来做一些数学和逻辑运算。JavaScript 本身不提供任何与 I/O(输入/输出)相关的 API,都要靠宿主环境(host)提供,所以 JavaScript 只合适嵌入更大型的应用程序环境,去调用宿主环境提供的底层 API。
目前,已经嵌入 JavaScript 的宿主环境有多种,最常见的环境就是浏览器,另外还有服务器环境,也就是 Node 项目。
从语法角度看,JavaScript 语言是一种“对象模型”语言。各种宿主环境通过这个模型,描述自己的功能和操作接口,从而通过 JavaScript 控制这些功能。但是,JavaScript 并不是纯粹的“面向对象语言”,还支持其他编程范式(比如函数式编程)。这导致几乎任何一个问题,JavaSc ...
C 语言简介历史C 语言最初是作为 Unix 系统的开发工具而发明的。
1969年,美国贝尔实验室的肯·汤普森(Ken Thompson)与丹尼斯·里奇(Dennis Ritchie)一起开发了 Unix 操作系统。Unix 是用汇编语言写的,无法移植到其他计算机,他们决定使用高级语言重写。但是,当时的高级语言无法满足他们的要求,汤普森就在 BCPL 语言的基础上发明了 B 语言。
1972年,丹尼斯·里奇和布莱恩·柯林汉(Brian Kernighan)又在 B 语言的基础上重新设计了一种新语言,这种新语言取代了 B 语言,所以称为 C 语言。
1973年,整个 Unix 系统都使用 C 语言重写。此后,这种语言开始快速流传,广泛用于各种操作系统和系统软件的开发。
1988年,美国国家标准协会(ANSI)正式将 C 语言标准化,标志着 C 语言开始稳定和规范化。
几十年后的今天,C 语言依然是最广泛使用、最流行的系统编程语言之一,Unix 和 Linux 系统现在还是使用 C 语言开发。
C 语言的特点C 语言能够长盛不衰、广泛应用,主要原因是它有一些鲜明的特点。
(1)低级语言
C ...
read 命令用法有时,脚本需要在执行过程中,由用户提供一部分数据,这时可以使用read命令。它将用户的输入存入一个变量,方便后面的代码使用。用户按下回车键,就表示输入结束。
read命令的格式如下。
1read [-options] [variable...]
上面语法中,options是参数选项,variable是用来保存输入数值的一个或多个变量名。如果没有提供变量名,环境变量REPLY会包含用户输入的一整行数据。
下面是一个例子demo.sh。
12345#!/bin/bashecho -n "输入一些文本 > "read textecho "你的输入:$text"
上面例子中,先显示一行提示文本,然后会等待用户输入文本。用户输入的文本,存入变量text,在下一行显示出来。
123$ bash demo.sh输入一些文本 > 你好,世界你的输入:你好,世界
read可以接受用户输入的多个值。
1234#!/bin/bashecho Please, enter your firstname and lastnameread ...
Bash 脚本入门脚本(script)就是包含一系列命令的一个文本文件。Shell 读取这个文件,依次执行里面的所有命令,就好像这些命令直接输入到命令行一样。所有能够在命令行完成的任务,都能够用脚本完成。
脚本的好处是可以重复使用,也可以指定在特定场合自动调用,比如系统启动或关闭时自动执行脚本。
Shebang 行脚本的第一行通常是指定解释器,即这个脚本必须通过什么解释器执行。这一行以#!字符开头,这个字符称为 Shebang,所以这一行就叫做 Shebang 行。
#!后面就是脚本解释器的位置,Bash 脚本的解释器一般是/bin/sh或/bin/bash。
123#!/bin/sh# 或者#!/bin/bash
#!与脚本解释器之间有没有空格,都是可以的。
如果 Bash 解释器不放在目录/bin,脚本就无法执行了。为了保险,可以写成下面这样。
1#!/usr/bin/env bash
上面命令使用env命令(这个命令总是在/usr/bin目录),返回 Bash 可执行文件的位置。env命令的详细介绍,请看后文。
Shebang 行不是必需的,但是建议加上这行。如果缺少该行,就 ...
