美文网首页
TypeScript入门教程(2)

TypeScript入门教程(2)

作者: 一瓣山河 | 来源:发表于2019-01-25 23:22 被阅读16次

基础

本部分主要介绍 TypeScript 中的常用类型和一些基本概念,具体内容包括:

  1. 原始数据类型

  2. 任意值

  3. 类型推论

  4. 联合类型

  5. 对象的类型---接口

  6. 数组的类型

  7. 函数的类型

  8. 类型断言

  9. 声明文件

  10. 内置对象


1. 原始数据类型

JavaScript 的类型分为两种:原始数据类型 和对象类型(Object types)。

原始数据类型包括:布尔值、数值、字符串、null、undefined 以及ES6 中的新类型 Symbol

如:

image

JavaScript 没有空值(Void)的概念,在 TypeScript 中,可以用 void 表示没有任何返回值的函数:

空值

function alertName(): void {    
    alert('My name is Tom');
}

声明一个 void 类型的变量没有什么用,因为你只能将它赋值为 undefined 和 null:

let unusable: void = undefined;

注:

  1. undefined 类型的变量只能被赋值为 undefined,null 类型的变量只能被赋值为 null。
  2. 与 void 的区别是,undefined 和 null 是所有类型的子类型。也就是说 undefined 类型的变量,可以赋值给 其它类型的变量

任意值any

  1. 任意值表示允许赋值为任意类型。

  2. 任意值类型的变量访问任何属性或方法都是允许的

  3. 声明一个变量为任意值之后,对它的任何操作,返回的内容的类型都是任意值

类型推论

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 类型的值, 其它类型会编译报错

访问联合类型的属性或方法

  1. 当 TypeScript 不确定一个联合类型的变量到底是哪个类型的时候,只能访问此联合类型的所有类型里共有的属性或方法

  2. 联合类型的变量在被赋值的时候,会根据类型推论的规则推断出一个类型,这时只能访问该类型的属性或方法

对象的类型---接口(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;
}

相关文章

网友评论

      本文标题:TypeScript入门教程(2)

      本文链接:https://www.haomeiwen.com/subject/gjlbjqtx.html