TypeScript的初学习(3)

9.类型兼容性(没看懂)

  基于结构子类型的。结构类型是一种只是用其成员来描述类型的方式。

 关于可靠性的注意事项

  TypeScript的类型系统允许某些在编译阶段无法确认其安全性的操作。

  规则:A需要兼容B,则B至少具有与A相同的属性。

  比较两个函数:

let x = (a: number) => 0;
let y = (b: number, s: string) => 0;   //只需要比较对应类型的参数。

y = x; // OK
x = y; // Error

  函数参数双向协变

10. 高级类型

交叉类型

  将多个类型合并成一个类型。使用场景:大多数在混入或不适合典型面向对象模型的地方

混合类型

  一个参数的类型是 类型A或者类型B或者类型C

类型保护与区分类型

  用户自定义的类型保护

function isFish(pet: Fish | Bird): pet is Fish {
    return (<Fish>pet).swim !== undefined;
}

  typeof类型保护

  instanceof类型保护

类型别名

 1 type Name = string;  
 2 type NameResolver = () => string;
 3 type NameOrResolver = Name | NameResolver;
type Container<T> = { value: T };

4 function getName(n: NameOrResolver): Name { 5 if (typeof n === 'string') { 6 return n; 7 } 8 else { 9 return n(); 10 } 11 }

字符串字面量类型

  允许你指定字符串必须的固定值。

type Easing = "ease-in" | "ease-out" | "ease-in-out";

数字字面量类型

type num=1|2|3|4

枚举成员类型 

  当每个枚举成员都是用字面量初始化的时候枚举成员是具有类型的。

多态的this类型

  多态的 this类型表示的是某个包含类或接口的 子类型  。通过this,连贯性地继承类的值

索引类型

function pluck<T, K extends keyof T>(o: T, names: K[]): T[K][] {
  return names.map(n => o[n]);
}

interface Person {
    name: string;
    age: number;
}
let person: Person = {
    name: 'Jarid',
    age: 35
};
let strings: string[] = pluck(person, ['name']); // ok, string[]

let personProps: keyof Person; // 'name' | 'age'
//keyof T 索引类型查询操作符  用于获取某种类型的所有键,其返回类型是联合类型
//T[K]索引访问操作符 

映射类型

  从旧类型中创建新类型的一种方式。

11.Symbols

  不可改变且唯一的。

  可用作对象属性的键、与计算出的属性名声明结合来声明对象的属性和类成员。

12.迭代器和生成器

  可迭代性:用for...of会遍历可迭代的对象。

    for...of遍历则返回对象键对应的值,for....in则返回对象键的列表。而且for...in可以操作任何对象。

  为各种不同的数据结构提供统一的访问机制,任何数据结构只要部署Iterator接口,就可以完成遍历操作。

13.模块

  module:import或export声明

  1.导出声明:任何声明(比如变量、类、类型别名或者接口)都能通过export关键字来导出。

  2.导入:将整个模块导入到一个变量,并通过它来访问模块的到处部分。

    import * as validator from "./ZipCodeValidator"; let myValidator = new validator.ZipCodeValidator();

  3.export = 和import = require()

    CommonJS和AMD的环境里都有一个exports变量,这个变量包含了一个模块的所有导出内容。

     为了支持CommonJS和AMD的exports, TypeScript提供了export =语法。export =语法定义一个模块的导出对象。 这里的对象一词指的是类,接口,命名空间,函数或枚举。

    使用export = 导出一个模块,则必须使用 import module = require("module")来导入此模块。

export = ZipCodeValidator;
import zip = require("./ZipCodeValidator");

  4.生成模块代码

  5.模块中不要使用命名空间

 

    

  

  

posted @ 2021-02-25 10:41  yaqian96  阅读(65)  评论(0)    收藏  举报