首页 > 其他 > 详细

ts(还在整理和排版,暂时粗稿)

时间:2020-08-14 02:38:42      阅读:90      评论:0      收藏:0      [点我收藏+]

TypeScript

微软开发,js 的超集,添加了静态类型和基于类的面向对象编程

npm install - g typescript // 安装TS
tsc helloworld.ts // 会把ts文件编译成js文件

基础类型

let myFlag: boolean = false // boolean类型
let myStr: string = ‘lpr‘ // string类型
let myNum:number = 10 // number类型

Void 类型

表示没有任何类型。如当函数没有返回值时,其返回值类型为 void
function warnMsg(): void {
console.log(‘This is warning message‘)
}

Null 和 Undefined 类型

let u: undefined = undefined;
let n: null = null;

默认情况下 null 和 undefined 是所有类型的子类型。
可以把 null 和 undefined 赋值给其他类型的变量。然而,如果你指定了--strictNullChecks 标记,null 和 undefined 只能赋值给 void 和它们各自的类型。

Any 类型(顶级类型)

let notSure:any=666
notSure = ‘lpr‘
notSure = false

TS 允许我们对 any 类型的值执行任意操作,而无需执行任何形式的检查。因此很容易编写出类型正确但在运行时有问题的代码。
notSure.trim() // OK

如果我们使用 any 类型,就无法使用 TypeScript 提供的大量的保护机制。为了解决 any 带来的问题,TypeScript 3.0 引入了 unknown 类型。

UnKnown 类型(顶级类型)

let val:unknown
val = ‘lpr‘
val = true

unknown 类型只能被赋值给 any 类型和 unknown 类型本身,给其他类型的变量会报错:
let value1: unknown = val; // OK
let value2: any = val; // OK
let value3: boolean = val; // Error

将 value 变量类型设置为 unknown 后,这些操作都不再被认为是类型正确的。
val.trim() // Error

Array 类型

let list:number[] = [1, 2, 3]
let list1: Array = [1, 2, 3]

Tuple 类型(元组)

可以定义其内元素为不同类型的数组
let tupleArr:[string, boolean]
tupleArr = [‘lpr‘, true]

Enum 类型(枚举)

enum StrEnum {
first = "first",
second = "second",
third = "third"
}

编译后的代码为:
"use strict";
var StrEnum;
(function (StrEnum) {

StrEnum["NORTH"] = "NORTH";
StrEnum["SOUTH"] = "SOUTH";
StrEnum["EAST"] = "EAST";
StrEnum["WEST"] = "WEST";

})(StrEnum || (StrEnum = {}));

Never 类型

表示的是那些永不存在的值的类型。例如,总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型。
function error(message: string): never {
throw new Error(message);
}

function infiniteLoop(): never {
while (true) {}
}

三. TS 断言

let someValue: any = "this is a string";

  1. 尖括号语法

let strLength: number = (someValue).length;
2.as 语法
let strLength: number = (someValue as string).length;

四. 类型守卫

类型守卫是可执行运行时检查的一种表达式,用于确保该类型在一定的范围内。

1.in 关键字
if (property in obj) {

console.log("Privileges: " + obj.property);

}

2.typeof 关键字
if (typeof arg === "string") {}

3.instanceof 关键字
if(children instanceof father){}

  1. 自定义类型保护的类型谓词

function isNumber(x: any): x is number {
return typeof x === "number";
}

五. 联合类型和类型别名

  1. 联合类型

const sayHello = (name: string | undefined) => {}

  1. 类型别名

类型别名用来给一个类型起个新名字
type Message = string | string[]

六. 交叉类型

可以把现有的多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性。
interface IPerson {
id: string;
age: number;
}

interface IWorker {
companyId: string;
}

type IStaff = IPerson & IWorker;

const staff: IStaff = {
id: ‘E1006‘,
age: 33,
companyId: ‘EFT‘
};

七. TS 函数

在声明函数时,可以通过 ? 号来定义可选参数,比如 age?: number 这种形式。在实际使用时,需要注意的是可选参数要放在普通参数的后面,不然会导致编译错误。

函数重载:使用相同名称和不同参数数量或类型创建多个方法的一种能力
当 TypeScript 编译器处理函数重载时,它会查找重载列表,尝试使用第一个重载定义。 如果匹配的话就使用这个。 因此,在定义重载的时候,一定要把最精确的定义放在最前面。

八. TS 接口

接口:对行为的抽象,具体如何行动需要由类去实现。也常用语对对象的形状进行描述

  1. 对象的形状

interface Person {
name: string;
age: number;
}

let Semlinker: Person = {
name: "Semlinker",
age: 33,
}; 2. 只读属性
只读属性用于限制只能在对象刚刚创建的时候修改其值
interface Person {
readonly name: string;
} 3. 可选属性
interface Person {
age?: number;
}

九. TS 类

泛型

ts(还在整理和排版,暂时粗稿)

原文:https://www.cnblogs.com/Mijiujs/p/13499793.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!