基础
本部分主要介绍 TypeScript 中的常用类型和一些基本概念,具体内容包括:
-
原始数据类型
-
任意值
-
类型推论
-
联合类型
-
对象的类型---接口
-
数组的类型
-
函数的类型
-
类型断言
-
声明文件
-
内置对象
1. 原始数据类型
JavaScript 的类型分为两种:原始数据类型 和对象类型(Object types)。
原始数据类型包括:布尔值、数值、字符串、null、undefined 以及ES6 中的新类型 Symbol。
如:
imageJavaScript 没有空值(Void)的概念,在 TypeScript 中,可以用 void 表示没有任何返回值的函数:
空值
function alertName(): void {
alert('My name is Tom');
}
声明一个 void 类型的变量没有什么用,因为你只能将它赋值为 undefined 和 null:
let unusable: void = undefined;
注:
- undefined 类型的变量只能被赋值为 undefined,null 类型的变量只能被赋值为 null。
- 与 void 的区别是,undefined 和 null 是所有类型的子类型。也就是说 undefined 类型的变量,可以赋值给 其它类型的变量
任意值any
-
任意值表示允许赋值为任意类型。
-
任意值类型的变量访问任何属性或方法都是允许的
-
声明一个变量为任意值之后,对它的任何操作,返回的内容的类型都是任意值
类型推论
TypeScript 会在没有明确指定类型的时候,根据类型推论的规则推断出一个类型。例:
let aString = 'seven'; // typescript 就会推断出aString是string类型的变量
aString = 7; // 编译时就会报错
如果定义的时候没有赋值,不管之后有没有赋值,都会被推断成 any 类型而完全不被类型检查:
let aString;
aString = 'seven';
sString = 7; // 编译通过
联合类型
联合类型(Union Types)表示取值可以为多种类型中的一种。
联合类型用 “|” 分割每个类型, 例:
let hVal : string | number;
hVal = "string";
hVal = 100; // hVal 可以是 string 或number 类型的值, 其它类型会编译报错
访问联合类型的属性或方法
-
当 TypeScript 不确定一个联合类型的变量到底是哪个类型的时候,只能访问此联合类型的所有类型里共有的属性或方法
-
联合类型的变量在被赋值的时候,会根据类型推论的规则推断出一个类型,这时只能访问该类型的属性或方法
对象的类型---接口(Interface)
使用** Interface **描述对象的类型,即对象的形状(shape)。 例:
interface Person {
name: string,
age: number
}
let smith: Person = {
name: 'smith',
age: 18
}
赋值的时候,变量的形状必须和接口的形状保持一致, 多一些或少一些属性,都是不允许的。
interface Person {
readonly id: number; // 只读属性
name: string,
age?: number, // 可选属性
[propName: string]: any; //任意属性
}
// 一旦定义了任意属性,那么确定属性和可选属性都必须是它的子属性:
对象的类型---接口(Interface)
- 「类型 + 方括号」表示法
let arr: number[] = [1,2,3]
- 数组泛型
let arr: Array<number> = [1,2,3]
- 用接口表示数组
interface NumberArray {
[index: number]: number;
}
let fibonacci: NumberArray = [1, 1, 2, 3, 5];
- 类数组
// 类数组(Array-like Object)不是数组类型,比如 arguments:
interface NumberArray {
[index: number]: number;
}
let fibonacci: NumberArray = [1, 1, 2, 3, 5];
//常见的类数组都有自己的接口定义,如 IArguments, NodeList, HTMLCollection 等:
function sum() {
let args: IArguments = arguments;
}
网友评论