namespace a {//Exclude从前者中排除后者type E = Exclude<string | number, string>;let e: E = 1;//Extract 从前者提取后者type E2 = Extract<string | number | null, string>;let e2: E2 = "123";//NonNullable排除空项type E3 = NonNullable<string | number | null | undefined>;let e3: E3 = 213;//redux 会用到ReturnTypefunction getUserInfo() {return { name: "123", age: 10 }}type UserInfo = ReturnType<typeof getUserInfo>;let user: UserInfo = { name: "456", age: 20 }//InstanceType获取构造函数的实例类型class Person {name: string;constructor(name: string) {this.name = name;}}type P = InstanceType<typeof Person>;let p: P = new Person('阿松大');}
模块vs命名空间
export导出
export let a = 10;export let b = 20;export default 30;
import导入
import { a, b } from "./13";console.log(a, b)
namespace
//namespace//1.封装类似代码//2.防止命名冲突//外部想要访问 命名空间内部的属性,需要export关键字//到处就可以访问了namespace zoo {export class Dog {}}namespace home {class Dog {}}let dog = new zoo.Dog();
类型声明文件
类型申明
1申明文件可以让我们不需要将js重构为ts,只需要加上申明文件就可以使用系统
2类型申明在编译的时候都要被删除,不会影响真正的代码
申明文件怎么写
1.你把它用ts重构一遍 (不科学)
2.给他配上申明文件 (也不太理智)
比如用jqery ,js写的没有ts文件
可以写在内部 ,也可以下载外部
外部声明可以放在一个单独的类型申明文件中,文件命名为*.d.ts
观看类型申明文件有助于了解库的使用方式
3.第三方申明文件
可以安装第三方的申明文件
@types 是一个约定的前缀,所有的第三方申明的类型库都会带前缀
内置对象是指根据标准在全局作用域上存在的对象,标准是指在ECMAScript和其他环境的标准
这些内置对象的类型申明文件,就包含在ts 核心库的申明文件之中
可以手动装下申明文件 cpnm i @types/jquery -S
export { };//类型申明//1申明文件可以让我们不需要将js重构为ts,只需要加上申明文件就可以使用系统//2类型申明在编译的时候都要被删除,不会影响真正的代码//普通类型申明/*** 申明文件怎么写* 1.你把它用ts重构一遍 (不科学)* 2.给他配上申明文件 (也不太理智)* 比如用jqery ,js写的没有ts文件* 可以写在内部 ,也可以下载外部* 外部声明可以放在一个单独的类型申明文件中,文件命名为*.d.ts* 观看类型申明文件有助于了解库的使用方式* 3.第三方申明文件* 可以安装第三方的申明文件* @types 是一个约定的前缀,所有的第三方申明的类型库都会带前缀* 内置对象是指根据标准在全局作用域上存在的对象,标准是指在ECMAScript和其他环境的标准* 这些内置对象的类型申明文件,就包含在ts 核心库的申明文件之中* 可以手动装下申明文件 cpnm i @types/jquery -S*///declare申明文件关键字//申明类型declare const $: (selector: string) => {click(): voidwidth(length: number): void}$("$root").click();$("$root").width(100);declare let name: string;declare function getName(): string;declare class Animal { name: string };interface Person6 {name: string}type Student = Person6 | string;declare enum AS {Wd,Rd}//常量declare const enum AS1 {Wd,Rd}let seasons: AS[] = [AS.Rd,AS.Wd,]//如何定义一个复杂对象//jQerydeclare namespace jQery {function ajax(url: string, config: any): void;let name: string;namespace fn {function extend(object: any): void}}jQery.ajax("/asd", {});jQery.name;jQery.fn.extend({});
自己在外部写,然后通过配置文件配置进来
//1.在此申明//2.在目录下新建一个typings 下加一个 *.d.ts//declare申明文件关键字//申明类型declare const $: (selector: string) => {click(): voidwidth(length: number): void}//如果在其他目录下 ,有可能需要 在 配置文件里配置下导入路径$("$root").click();$("$root").width(100);
Types auto installer
自动装第三方声明文件 vscode插件 Types auto installer
