TypeScript 是一种面向对象的编程语言。
面向对象主要有两个概念:对象和类。
- 对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
- 类:类是一个模板,它描述一类对象的行为和状态。
- 方法:方法是类的操作的实现步骤。
class Site {
name():void {
console.log("Runoob")
}
}
var obj = new Site();
obj.name();
定义了一个类 Site,该类有一个方法 name(),该方法在终端上输出字符串 Runoob。
new 关键字 创建类的对象,该对象调用方法 name()。
编译后生成的 JavaScript 代码如下:
var Site = /** @class */ (function () {
function Site() {
}
Site.prototype.name = function () {
console.log("Runoob");
};
return Site;
}());
var obj = new Site();
obj.name();
TypeScript 包含的数据类型
任意类型:声明为 any 的变量可以赋予任意类型的值。
let x: any = 1; // 数字类型
x = 'I am who I am'; // 字符串类型
x = false; // 布尔类型
let arrayList: any[] = [1, false, 'fine'];
arrayList[1] = 100;
字符串类型
let name: string = "Runoob";
let years: number = 5;
let words: string = `您好,今年是 ${ name } 发布 ${ years + 1} 周年`;
数字类型
let binaryLiteral: number = 0b1010; // 二进制
let octalLiteral: number = 0o744; // 八进制
let decLiteral: number = 6; // 十进制
let hexLiteral: number = 0xf00d; // 十六进制
布尔类型
let flag: boolean = true;
数组类型
let arr: number[] = [1, 2];
或let arr: Array<number> = [1, 2];
元组:各元素的类型不必相同
let x: [string, number];
x = ['Runoob', 1]; // 运行正常
console.log(x[0]); // 输出 Runoob
枚举:数值集合
enum Color {Red, Green, Blue};
let c: Color = Color.Blue;
console.log(c); // 输出 2
const getValue = () => {
return 0
}
enum List {
A = getValue(),
B = 2, // 此处必须要初始化值,不然编译不通过
C
}
console.log(List.A) // 0
console.log(List.B) // 2 A 的值是被计算出来的。如果某个属性的值是计算出来的,那么它后面一位的成员必须要初始化值。
console.log(List.C) // 3
enum Status {
Yes = 'yes', // 为string 类型时,不会自动初始化
No = 'no' // 必须为其初始化
}
enum Direction2 {
Up = 1, // 当初始化第一个常量后,其余后续的成员会从 1开始自动增长
Down, // 2
Left, // 3
Right, // 4
}
void:该方法没有返回值
function hello(): void {
alert("Hello Runoob");
}
null:对象值缺失。
null是一个只有一个值的特殊类型。表示一个空对象引用。
用 typeof 检测 null 返回是 object。
// 启用 --strictNullChecks
let x: number | null | undefined;
x = 1; // 运行正确
x = undefined; // 运行正确
x = null; // 运行正确
undefined:初始化变量为一个未定义的值
typeof 一个没有值的变量会返回 undefined。
never:其它类型(包括 null 和 undefined)的子类型,代表从不会出现的值。
let x: never;
let y: number;
// 运行错误,数字类型不能转为 never 类型
x = 123;
// 运行正确,never 类型可以赋值给 never类型
x = (()=>{ throw new Error('exception')})();
// 运行正确,never 类型可以赋值给 数字类型
y = (()=>{ throw new Error('exception')})();
// 返回值为 never 的函数可以是抛出异常的情况
function error(message: string): never {
throw new Error(message);
}
// 返回值为 never 的函数可以是无法被执行到的终止点的情况
function loop(): never {
while (true) {}
}