1. namespace a {
  2. //Exclude从前者中排除后者
  3. type E = Exclude<string | number, string>;
  4. let e: E = 1;
  5. //Extract 从前者提取后者
  6. type E2 = Extract<string | number | null, string>;
  7. let e2: E2 = "123";
  8. //NonNullable排除空项
  9. type E3 = NonNullable<string | number | null | undefined>;
  10. let e3: E3 = 213;
  11. //redux 会用到ReturnType
  12. function getUserInfo() {
  13. return { name: "123", age: 10 }
  14. }
  15. type UserInfo = ReturnType<typeof getUserInfo>;
  16. let user: UserInfo = { name: "456", age: 20 }
  17. //InstanceType获取构造函数的实例类型
  18. class Person {
  19. name: string;
  20. constructor(name: string) {
  21. this.name = name;
  22. }
  23. }
  24. type P = InstanceType<typeof Person>;
  25. let p: P = new Person('阿松大');
  26. }

模块vs命名空间

export导出

  1. export let a = 10;
  2. export let b = 20;
  3. export default 30;

import导入

  1. import { a, b } from "./13";
  2. console.log(a, b)

namespace

  1. //namespace
  2. //1.封装类似代码
  3. //2.防止命名冲突
  4. //外部想要访问 命名空间内部的属性,需要export关键字
  5. //到处就可以访问了
  6. namespace zoo {
  7. export class Dog {
  8. }
  9. }
  10. namespace home {
  11. class Dog {
  12. }
  13. }
  14. 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

  1. export { };
  2. //类型申明
  3. //1申明文件可以让我们不需要将js重构为ts,只需要加上申明文件就可以使用系统
  4. //2类型申明在编译的时候都要被删除,不会影响真正的代码
  5. //普通类型申明
  6. /**
  7. * 申明文件怎么写
  8. * 1.你把它用ts重构一遍 (不科学)
  9. * 2.给他配上申明文件 (也不太理智)
  10. * 比如用jqery ,js写的没有ts文件
  11. * 可以写在内部 ,也可以下载外部
  12. * 外部声明可以放在一个单独的类型申明文件中,文件命名为*.d.ts
  13. * 观看类型申明文件有助于了解库的使用方式
  14. * 3.第三方申明文件
  15. * 可以安装第三方的申明文件
  16. * @types 是一个约定的前缀,所有的第三方申明的类型库都会带前缀
  17. * 内置对象是指根据标准在全局作用域上存在的对象,标准是指在ECMAScript和其他环境的标准
  18. * 这些内置对象的类型申明文件,就包含在ts 核心库的申明文件之中
  19. * 可以手动装下申明文件 cpnm i @types/jquery -S
  20. */
  21. //declare申明文件关键字
  22. //申明类型
  23. declare const $: (selector: string) => {
  24. click(): void
  25. width(length: number): void
  26. }
  27. $("$root").click();
  28. $("$root").width(100);
  29. declare let name: string;
  30. declare function getName(): string;
  31. declare class Animal { name: string };
  32. interface Person6 {
  33. name: string
  34. }
  35. type Student = Person6 | string;
  36. declare enum AS {
  37. Wd,
  38. Rd
  39. }
  40. //常量
  41. declare const enum AS1 {
  42. Wd,
  43. Rd
  44. }
  45. let seasons: AS[] = [
  46. AS.Rd,
  47. AS.Wd,
  48. ]
  49. //如何定义一个复杂对象
  50. //jQery
  51. declare namespace jQery {
  52. function ajax(url: string, config: any): void;
  53. let name: string;
  54. namespace fn {
  55. function extend(object: any): void
  56. }
  57. }
  58. jQery.ajax("/asd", {});
  59. jQery.name;
  60. jQery.fn.extend({});

自己在外部写,然后通过配置文件配置进来

  1. //1.在此申明
  2. //2.在目录下新建一个typings 下加一个 *.d.ts
  3. //declare申明文件关键字
  4. //申明类型
  5. declare const $: (selector: string) => {
  6. click(): void
  7. width(length: number): void
  8. }
  9. //如果在其他目录下 ,有可能需要 在 配置文件里配置下导入路径
  10. $("$root").click();
  11. $("$root").width(100);

Types auto installer

自动装第三方声明文件 vscode插件 Types auto installer