微软开发,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
function warnMsg(): void {
console.log(‘This is warning message‘)
}
let u: undefined = undefined;
let n: null = null;
默认情况下 null 和 undefined 是所有类型的子类型。
可以把 null 和 undefined 赋值给其他类型的变量。然而,如果你指定了--strictNullChecks 标记,null 和 undefined 只能赋值给 void 和它们各自的类型。
let notSure:any=666
notSure = ‘lpr‘
notSure = false
TS 允许我们对 any 类型的值执行任意操作,而无需执行任何形式的检查。因此很容易编写出类型正确但在运行时有问题的代码。
notSure.trim() // OK
如果我们使用 any 类型,就无法使用 TypeScript 提供的大量的保护机制。为了解决 any 带来的问题,TypeScript 3.0 引入了 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
let list:number[] = [1, 2, 3]
let list1: Array
可以定义其内元素为不同类型的数组
let tupleArr:[string, boolean]
tupleArr = [‘lpr‘, true]
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 = {}));
表示的是那些永不存在的值的类型。例如,总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型。
function error(message: string): never {
throw new Error(message);
}
function infiniteLoop(): never {
while (true) {}
}
let someValue: any = "this is a string";
let strLength: number = (
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){}
function isNumber(x: any): x is number {
return typeof x === "number";
}
const sayHello = (name: string | undefined) => {}
类型别名用来给一个类型起个新名字
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‘
};
在声明函数时,可以通过 ? 号来定义可选参数,比如 age?: number 这种形式。在实际使用时,需要注意的是可选参数要放在普通参数的后面,不然会导致编译错误。
函数重载:使用相同名称和不同参数数量或类型创建多个方法的一种能力
当 TypeScript 编译器处理函数重载时,它会查找重载列表,尝试使用第一个重载定义。 如果匹配的话就使用这个。 因此,在定义重载的时候,一定要把最精确的定义放在最前面。
接口:对行为的抽象,具体如何行动需要由类去实现。也常用语对对象的形状进行描述
interface Person {
name: string;
age: number;
}
let Semlinker: Person = {
name: "Semlinker",
age: 33,
}; 2. 只读属性
只读属性用于限制只能在对象刚刚创建的时候修改其值
interface Person {
readonly name: string;
} 3. 可选属性
interface Person {
age?: number;
}
原文:https://www.cnblogs.com/Mijiujs/p/13499793.html