TypeScript 是一种面向对象的编程语言。
面向对象主要有两个概念:对象和类。
看一个简单的例子:
// class.ts
var pType = "human beings"; // 全局变量
class People {
countries = "more than 200+"; // 类变量
static home = "earth"; // 静态变量
man(): void {
let name:string = "lilei";
let age:number = 38;
let isMarried:boolean = true;
let friends:string[] = ["jim","lucy","lily","HanMeiMei","tom"];
let msg:any = {
name: name,
age: age,
isMarried: isMarried,
friends: friends
}
console.log('people man().',msg);
}
test():void {
var x:number;
// y = 99; // 这里会报错
console.log(x, typeof x, this);
console.log(this.countries, People.home);
}
}
let p = new People();
p.man();
p.test();
p.countries = "200 + ";
People.home = "the earth.";
console.log(p.countries, People.home);
let p2 = new People();
p2.test();
tsc class.ts
node class.js
执行结果和预期的一样。
但是这个时候,在vscode编辑器里面发现class.ts报错了,原因是生成的js文件里面也定义了People/p两个变量。
暂时不知道解决办法。
现在打开class.js看看里面的代码:
var pType = "human beings"; // 全局变量
var People = /** @class */ (function () {
function People() {
this.countries = "more than 200+"; // 类变量
}
People.prototype.man = function () {
var name = "lilei";
var age = 38;
var isMarried = true;
var friends = ["jim", "lucy", "lily", "HanMeiMei", "tom"];
var msg = {
name: name,
age: age,
isMarried: isMarried,
friends: friends
};
console.log('people man().', msg);
};
People.prototype.test = function () {
var x;
// y = 99; // 这里会报错
console.log(x, typeof x, this);
console.log(this.countries, People.home);
};
People.home = "earth"; // 静态变量
return People;
}());
var p = new People();
p.man();
p.test();
p.countries = "200 + ";
People.home = "the earth.";
console.log(p.countries, People.home);
var p2 = new People();
p2.test();
变量声明
变量可以用let 和 var 声明。
var [变量名] : [类型];
如果声明的值和类型不匹配,语句会报错。
如果变量声明没有定义类型,typescript编译器会猜测它的类型,如果猜测不确定,则会认为是any类型。
如果一个变量只声明,不初始化值,它的值就是undefined,typeof返回的就是是‘undefined'
比如: var x:number; console.log(x, typeof x); // undefined 'undefined'
基础类型
- any 类型:声明为 any 的变量可以赋予任意类型的值。
- number 数字类型:双精度 64 位浮点值。它可以用来表示整数和分数。
- string 字符串类型:一个字符系列,使用单引号(')或双引号(")来表示字符串类型。反引号(`)来定义多行文本和内嵌表达式。
- boolean布尔类型: 表示逻辑值:true 和 false。
- 数组类型:let a:Array<number> = [1,2]; let b:number[] = [2,3];
- 元组
- void
- null
- undefined
10.enum
11.never
如果一个类型可能出行 null 或 undefined, 可以用 | 来支持多种类型,示例代码如下:
let x = number | null | undefined;
如果值和类型不匹配,会报错。
函数声明
typescript可以用面向对象class,也可以用function定义函数。
格式如下:
function a (x:number, name: string, arr: any[]) : boolean {
...
}
声明提升
// c2. ts
console.log(fn1, a); // [function fn1] undefined
// console.log(fn1, a, b); // 报错:块级变量b在还没有声明前就使用了
function fn1 () {
console.log('this is fn1().');
}
var a:number = 123;
let b:string = "123";
变量提升,let使用和js完全一样,因为,归根结底,typescript最终还是会转换成js的。
转换后的js代码:
console.log(fn1, a); // [function fn1] undefined
// console.log(fn1, a, b); // 报错:块级变量b在还没有声明前就使用了
function fn1() {
console.log('this is fn1().');
}
var a = 123;
var b = "123";