简介
- TypeScript是JavaScript的超集,扩展了JavaScript的语法
环境搭建
- 使用npm安装TypeScript:
npm install -g typescript
- 查看tsc的版本:
tsc -v
Version 5.6.3
- 新建test.ts文件,内容编辑如下:
const str:string = "Hello World"
console.log(str)
- 将ts文件转化为js文件
tsc test.ts
- 执行js脚本
node test.js
TS中的基础类型
- string
- number
- boolean
- array:表示相同类型的元素数组
let list: number[] = [1, 2, 3];
let infos: Array<string> = ["Hi", "I am Nrvcer"];
- tuple:表示已知类型和长度的数组
let person: [number, string] = [24, "nrvcer"];
- enum
- any:任意类型,不进行类型检查
// 定义存储各种类型数据的数组
let arrayList: any[] = [1, false, 'fine'];
- void:无返回值,常用于函数或者方法
- null:null是一个只有一个值的特殊类型,表示一个空对象引用。用 typeof 检测 null 返回是 object
console.log(typeof null) // object
- undefined: undefined 是一个没有设置值的变量,typeof 一个没有值的变量会返回 undefined。
console.log(typeof undefined) // undefined
- never:表示不会有返回值
- object:表示非原始类型
- union
let id: string | number;
id = 24
- unknown:不确定类型,需类型检查后再使用
运算符
略
条件语句
略
循环
略
函数
- 普通函数定义示例如下:
// age为可选参数,调用func1时可以不传递形参对应的实参值
function func1(name: string, age?: number): string {
if (age) {
return name + age;
} else {
return name;
}
}
console.log(func1("Nrvcer"));
console.log(func1("Nrvcer", 24));
function func2(name: string, age: number = 24) {
return name + age;
}
console.log(func2("Nrvcer"));
console.log(func2("Nrvcer", 26));
- 匿名函数定义示例如下:
(function(name: string, age: number):void {
console.log(name, age);
})("Nrvcer", 24);
- Lambda函数定义示例如下:
((name: string, age: number) => {
console.log(name, age);
})("Nrvcer", 24);
Number
原始数值的包装类,详情略
String
用于处理文本,详情略
Array
- 数组的定义示例如下:
let arr: any[] = ["Nrvcer", 24];
console.log(arr instanceof Array) // true
arr = [1024, 2048];
Map
Map对象用于保存键值对。详情略
元组
- 元组:表示已知类型和长度的数组,其中存储的元素类型可以不同
- 示例:
let me: [number, string] = [24, "Nrvcer"];
console.log(me[0], me[1]);
// 元组的解构赋值
let [age, name] = me;
console.log(age, name);
联合类型
- 联合类型可以通过管道
|将变量设置为多种类型,赋值时可以根据设置的类型来赋值 - 语法格式为:
Type1 | Type2 | Type3
- 示例如下:
function func(arg: string | string[]) {
if (typeof arg == "string") {
console.log(arg);
} else {
for (let i = 0; i < arg.length; ++i) {
console.log(arg[i]);
}
}
}
func("test");
func(["Hi", "World"]);
接口
接口是一系列抽象方法的声明
类
- 一个类示例如下:
class Person {
private static head: number = 1;
public static getHead(): number {
return this.head;
}
private name: string;
private age: number;
public constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
public getName(): string {
return this.name;
}
public getAge(): number {
return this.age;
}
}
var p = new Person("Nrvcer", 24);
console.log(p.getName(), p.getAge(), Person.getHead(), p instanceof Object);
泛型
- 泛型函数示例:
function func<T>(arg: T): T {
return arg;
}
console.log(func<string>("test"));
console.log(func<number>(1024));
- 泛型接口示例:
interface Introduce<T, U> {
name: T;
age: U;
}
let pair: Introduce<string, number> = {name: "Nrvcer", age: 24};
- 泛型类示例:
class Test<T> {
private value: T;
constructor(value: T) {
this.value = value;
}
getValue(): T {
return this.value;
}
}
let obj = new Test<number>(1024);
console.log(obj.getValue());
- 泛型约束示例:
interface CalcLength {
length: number;
}
// 传递的参数拥有 length 属性,TypeScript 就会认定其符合要求
function len<T extends CalcLength>(arg: T) {
console.log(arg.length);
}
len("test");
TS中的声明文件
- 在TS中引用第三方JS编写的库时,需要引用第三方JS编写的库对应的声明文件,后缀名为d.ts。声明文件或模块的语法格式如下:
declare module Module_Name {
}
浙公网安备 33010602011771号