1、typeScript语法使用 冒号表示类型,例如布尔类型: let isDone: boolean = false;
2、数据类型都是小写的,一共有11种类型
布尔值类型同js一样,true/false值
数字类型除了js一样之外,还可是es6语法的二进制和八进制字面量写法,编译成js是十进制
字符串类型,除了js的普通用法,也支持es6的模版字符串的用法,例如let name: string = yan
;let sentence: string = `Hello, my name is ${ name }
对象类型object,在 TypeScript 中,我们使用接口(Interfaces)来定义对象的类型
interface Person {
readonly id: number;//只读属性,除了初始化赋值外,之后都不可赋值
name: string;
age?: number;//可选属性,初始化可有可无
[propName: string]: any;//任意属性的赋值,[propName: string]表示键名是字符串类型
}
let tom: Person = {
id:1997,//初始化赋值
name: 'Yan',
age:23,
gender: 1212
};
interface NumberArray {
[index: number]: number;
}
let fibonacci: NumberArray = [1, 1, 2, 3, 5];
let x: [string, number];
x = ['hello', 10]; // OK;
x = [10, 'hello']; // Error;
x = ['yan', 10,true,0]; // 多值少值都会报错
enum Color {Red, Green, Blue}
let c: Color = Color.Green;
enum Color1 {Red = 1, Green, Blue};
let b: Color1 = Color1.Green;//也可全部指定赋值
any类型,表示任何类型,可以用于暂且不知道是什么类型的值,或者动态的值指定类型,因为any可以是任何类型,而且可以通过编译,例如:
let notSure: any = 4; notSure = “maybe a string instead”; notSure = false; // okay, definitely a boolean
当你只知道一部分数据的类型时,any类型也是有用的,比如有个数组包含了不同数据,let list: any[] = [1, true, “free”]; list[1] = 100;
变量如果在声明的时候未指定其类型且未赋值,那么它会被识别为任意值类型
void类型,表示没有类型,当函数没有返回值的时候就可能见到void类型
-void类型只有两个值undefined和null,所以申明也只能是这两个值
Null 和 Undefined类型,默认情况下null和undefined是所有类型的子类型。
function error(message: string): never {
throw new Error(message);
} // 推断的返回值类型为
neverfunction fail() {
return error("Something failed");
} // 返回never的函数必须存在无法达到的终点function infiniteLoop(): never { while (true) {
}
}
定义:变量申明没有指定类型赋值,那么ts会依照类型推论给变量指定一个类型
例如:let noType = 100;//类型推论则给变量默认为数值型,若是再次赋值为string类型则会报错
定义:表示取值可以为多种类型中的一种(类似取或值)
let myFavoriteNumber: string | number;
myFavoriteNumber = 'seven';
myFavoriteNumber = 7;
function getString(something: string | number): string {
return something.toString();
}
let myFavoriteNumber: string | number;
myFavoriteNumber = 'seven';
console.log(myFavoriteNumber.length); // 5
myFavoriteNumber = 7;
console.log(myFavoriteNumber.length); // 编译时报错
定义:类型断言(Type Assertion)可以用来手动指定一个值的类型。
简单来讲就是可以通过类型断言不对某段代码做编译,但是无法避免运行时的错误反而滥用类型断言可能会导致运行时错误
两种形式:
1、尖括号法:let someValue: any = “this is a string”; let strLength: number = (someValue).length;
2、as语法:let someValue: any = “this is a string”; let strLength: number = (someValue as string).length;
两种形式都可以看个人喜好,但是当你在TypeScript里使用JSX时,只有 as语法断言是被允许的
类型断言应用:
interface Cat {
name: string;
run(): void;
}
interface Fish {
name: string;
swim(): void;
}
function swim(animal: Cat | Fish) {
(animal as Fish).swim();
}
const tom: Cat = {
name: 'Tom',
run() { console.log('run') }
};
swim(tom);
// Uncaught TypeError: animal.swim is not a function`
class ApiError extends Error {
code: number = 0;//值是具体值
}
class HttpError extends Error {
statusCode: number = 200;
}
function isApiError(error: Error) {
if (typeof (error as ApiError).code === 'number') {
return true;
}
return false;
}
类型断言和类型转化
类型断言只会影响编译,不会影响真正的变量的类型
类型断言和类型申明
类型申明较为严格
要A断言为B,则满足A兼容B或者B兼容A就可通过断言去获取AB的值,
要A赋值给B,则必须满足A兼容B
类型断言和范型
typeScript的数据类型较多,真正的吸收还得是项目实战。