第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

【十月打卡】第60天 TypeScript(16)

標(biāo)簽:
Typescript

类型描述文件

  • 类型描述文件格式为*.d.ts
  • 全局或者模块需要declare来声明

全局

如下以jquery来举例

// index.html
<script class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.js"></script>
<script class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="./src/index.ts"></script>

// index.ts
$(function () {
  $('body').html('<div>Hello world</div>');
});

针对上面用法的类型描述文件:jquery.d.ts

interface JqueryInstance {
  html: (html: string) => JqueryInstance;
}

// 方式一:函数重载
declare function $(readyFn: () => void): void;
declare function $(selector: string): JqueryInstance;

// 方式二:使用interface,实现函数的重载
interface Jquery {
  (readyFn: () => void): void;
  (selector: string): JqueryInstance;
}
declare var $: Jquery;

如果jquery增加了对象以及类怎么处理?

$(function () {
  $('body').html('<div>Hello world</div>');
  new $.fn.init();
});
interface JqueryInstance {
  html: (html: string) => JqueryInstance;
}

declare function $(readyFn: () => void): void;
declare function $(selector: string): JqueryInstance;

// 命名空间实现对象以及类进行类型定义
declare namespace $ {
  namespace fn {
    class init {}
  }
}

模块

如果jquery是以模块来引入,类型描述文件该怎么处理呢

import $ from 'jquery';
$(function () {
  $('body').html('<div>Hello world</div>');
  new $.fn.init();
});
  • 声明模块加上module
  • 通过export导出
declare module 'jquery' {
  interface JqueryInstance {
    html: (html: string) => JqueryInstance;
  }

  // 重载
  function $(readyFn: () => void): void;
  function $(selector: string): JqueryInstance;
  namespace $ {
    namespace fn {
      class init {}
    }
  }

  // 导出
  export  = $;
}

泛型结合keyof

先看下面实例
TS报错:return this.info[key]
原因:因为getInfo传入的参数无法保证是name、age或者gender中的一个

interface Person {
  name: string;
  age: number;
  gender: string;
}

class Teacher {
  constructor(private info: Person) {}
  getInfo(key: string) {
    return this.info[key];  // 报错
  }
}

const teacher = new Teacher({
  name: 'tz',
  age: 30,
  gender: 'male',
});

teacher.getInfo('name');

通过keyof可以来解决, keyof遍历Person的属性

interface Person {
  name: string;
  age: number;
  gender: string;
}

class Teacher {
  constructor(private info: Person) {}
  getInfo<T extends keyof Person>(key: T): Person[T] {
    return this.info[key];
  }
}

const teacher = new Teacher({
  name: 'tz',
  age: 30,
  gender: 'male',
});

teacher.getInfo('name');
點(diǎn)擊查看更多內(nèi)容
2人點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消