TypeScript语法进阶(下)

简介: TypeScript语法进阶

TypeScript语法进阶(上)https://developer.aliyun.com/article/1392235

命名空间

namespace Home {
  class Header {
    constructor() {
      const elem = document.createElement('div');
      elem.innerText = 'This is Header';
      document.body.appendChild(elem);
    }
  }
  class Content {
    constructor() {
      const elem = document.createElement('div');
      elem.innerText = 'This is Content';
      document.body.appendChild(elem);
    }
  }
  class Footer {
    constructor() {
      const elem = document.createElement('div');
      elem.innerText = 'This is Footer';
      document.body.appendChild(elem);
    }
  }
  export class Page {
    constructor() {
      new Header();
      new Content();
      new Footer();
    }
  }
}

命名空间嵌套

page.ts

///<reference path="components.ts" />
namespace Home {
  export namespace Dell {
    export const teacher: Components.user = {
      name: 'dell'
    };
  }
  export class Page {
    constructor() {
      new Components.Header();
      new Components.Content();
      new Components.Footer();
      new Components.Footer();
    }
  }
}

components.ts


namespace Components {
  export interface user {
    name: string;
  }
  export class Header {
    constructor() {
      const elem = document.createElement('div');
      elem.innerText = 'This is Header';
      document.body.appendChild(elem);
    }
  }
  export class Content {
    constructor() {
      const elem = document.createElement('div');
      elem.innerText = 'This is Content';
      document.body.appendChild(elem);
    }
  }
  export class Footer {
    constructor() {
      const elem = document.createElement('div');
      elem.innerText = 'This is Footer';
      document.body.appendChild(elem);
    }
  }
}

image.png

import对应的模块化

使用Parcel打包,TS代码

npm install parcel@next -D

image.png

会读取文件并进行编译。

image.png

描述文件中的全局类型

编写一个.d.ts文件,一个类库是js书写的,但是ts去引用就会出错,就需要安装类型定义文件。

jQuery.t.ds

// 定义全局变量
// declare var $: (param: () => void) => void;
// 定义全局函数
interface JqueryInstance {
  html: (html: string) => JqueryInstance;
}
declare function $(readyFunc: () => void): void;
declare function $(selector: string): JqueryInstance;

page.ts

$(function() {
  $('body').html('<div>123</div>');
});
// 使用了interface的语法,实现函数重载
interface JQuery {
  (readyFunc: () => void): void;
  (selector: string): JqueryInstance;
}
declare var $: JQuery;
$(function () {
  $("body").html("<div>123</div>");
  new $.fn.init();
});
// 如何对对象进行类型定义,以及对类进行类型定义,以及命名空间的潜逃
declare namespace $ {
  namespace fn {
    class init {}
  }
}
// 使用了interface的语法,实现函数重载
interface JQuery {
  (readyFunc: () => void): void;
  (selector: string): JqueryInstance;
}
declare var $: JQuery;

模块代码的类型描述文件

安装jQuerynpm install jquery --save

image.png

// Es6 模块化
declare module 'jquery' {
  interface JqueryInstance {
    html: (html: string) => JqueryInstance;
  }
  // 混合类型
  function $(readyFunc: () => void): void;
  function $(selector: string): JqueryInstance;
  namespace $ {
    namespace fn {
      class init {}
    }
  }
  export = $;
}

泛型中keyof语法的使用

interface Person {
  name: string;
  age: number;
  gender: string;
}
// type NAME = 'name';
// key: 'name';
// Person['name'];
// type T = 'age'
// key: 'age'
// Person['age']
// type T = 'gender'
// key: 'gender'
// Person['gender']
class Teacher {
  constructor(private info: Person) {}
  getInfo<T extends keyof Person>(key: T): Person[T] {
    return this.info[key];
  }
}
const teacher = new Teacher({
  name: 'dell',
  age: 18,
  gender: 'male'
});
const test = teacher.getInfo('name');
console.log(test);
目录
相关文章
|
2月前
|
XML JavaScript 前端开发
TypeScript 中的“as”语法是什么?
TypeScript 中的“as”语法是什么?
|
2月前
|
JavaScript
详细介绍 TypeScript 中常用的循环语句,包括它们的语法、用法以及一些注意事项
详细介绍 TypeScript 中常用的循环语句,包括它们的语法、用法以及一些注意事项
87 1
|
2月前
|
JavaScript 前端开发 开发者
深入理解ArkTS:Harmony OS 应用开发语言 TypeScript 的基础语法和关键特性
深入理解ArkTS:Harmony OS 应用开发语言 TypeScript 的基础语法和关键特性
242 0
|
2月前
|
JavaScript 编译器 开发者
TypeScript中的“as”语法是什么?
TypeScript中的“as”语法是什么?
18 0
|
2月前
|
JavaScript 前端开发 编译器
TypeScript中的“as”语法是什么?
TypeScript中的“as”语法是什么?
28 0
|
2月前
|
JavaScript 前端开发 IDE
【TypeScript】带类型语法的JavaScript
【1月更文挑战第26天】【TypeScript】带类型语法的JavaScript
|
2月前
|
JavaScript 前端开发 安全
TypeScript 基础语法是什么样的?
TypeScript 基础语法是什么样的?
59 1
|
2月前
|
JavaScript 前端开发 编译器
TypeScript 中的变量声明:变量声明的语法、变量的作用域、变量的类型推断和类型断言
TypeScript 中的变量声明:变量声明的语法、变量的作用域、变量的类型推断和类型断言
46 1
|
2月前
|
JavaScript 前端开发 开发工具
TypeScript:为JavaScript增加语法和解决问题的利器
TypeScript:为JavaScript增加语法和解决问题的利器
28 0
|
2月前
|
JavaScript 前端开发 程序员
TypeScript 类型体操,无非是语法过度嵌套而已
TypeScript 类型体操,无非是语法过度嵌套而已