TypeScript 是一种由微软开发的自由和开源的编程语言。它是 JavaScript 的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程。
TypeScript是具有类型语法的JavaScript,是一种强类型编程语言,并且提供了最新的JavaScript特性。它经过代码编译后最终生成为JavaScript,能够在任何运行JavaScript的地方运行,比如浏览器、NodeJS、Electron、Deno等环境中。
let name: string = '王同超'
let age: number = 18
let isStudy: boolean = true
let myname: undefined = undefined
let myname: undefined = void 0
let myname: null = null
// strictNullChecks配置项可以配置undefined和null是否
// 是其他类型的子类型
let name: void = undefined
let func: () => void = () => {
}
let myname: symbol = Symbol('王同超');
let bigNumber: bigint = 10n
let arr: number[] = [1, 2, 3]
// or
let arr: Array<string> = ['hello', 'wrold']
元组类似于数组,与数组不同的是,数组只能定义固定类型的值而元组可以定义不同类型的值以及元素的数量
let tup: [number, string] = [18, '王同超']
// 这里定义的类型以及数量必须相同,否则会报错
enum Code{
success,
faild,
noAuth
}
// 编译成JavaScript为
var Code;
(function (Code) {
Code[Code["success"] = 0] = "success";
Code[Code["faild"] = 1] = "faild";
Code[Code["noAuth"] = 2] = "noAuth";
})(Code || (Code = {
}));
enum Code {
success = 'SUCESS',
faild = 'FAILD',
noAuth = 'NOAUTH'
}
// 编译成JavaScript为
var Code;
(function (Code) {
Code["success"] = "SUCESS";
Code["faild"] = "FAILD";
Code["noAuth"] = "NOAUTH";
})(Code || (Code = {
}));
enum Code {
success,
faild = 'FAILD',
noAuth = 1,
error
}
// 编译成JavaScript为
var Code;
(function (Code) {
Code[Code["success"] = 0] = "success";
Code["faild"] = "FAILD";
Code[Code["noAuth"] = 3] = "noAuth";
Code[Code["error"] = 4] = "error";
})(Code || (Code = {
}));
const enum Code {
success,
faild,
noAuth
}
console.log(Code.success)
// 编译成JavaScript为
console.log(0 /* success */);
任何类型都是any的“子类型”,因此any也没成为类型系统的顶级类型(全局超级类型)
大量使用any类型会导致ts的类型保护形同虚设,在TypeScript 3.0 引入了unknown类型
let data: any
data = 18
data = '王同超'
data = () => {
alert('No problem') }
// noImplicitAny 配置项能够配置是否允许隐式any(ts类型推断能够推断出类型)
类似于any可以定义为任意类型,但是将unknown赋值给其他类型时会有限制,调用unknown类型数据方法也会报错
let data: unknown
data = 1
data = '王同超'
data = {
name: '王同超' }
data = () => {
}
let data1: unknown = data // 没问题
let data2: any = data // 没问题
let data: number = data // error
let data: string = data // error
data.name // error
never类型表示永远不存在的值。常用在抛出异常或者没有返回值的函数等
// 场景1
function fail(msg: string): never {
throw new Error(msg);
}
// 场景2
function fn(x: string | number) {
if (typeof x === "string") {
// do something
} else if (typeof x === "number") {
// do something else
} else {
x; // has type 'never'!
}
}
// 场景3
switch(x: 1|2) {
case 1:
break
case 2:
break
default:
const exhaustiveCheck: never = x
break
}
let myname: 'wt