zoukankan      html  css  js  c++  java
  • TypeScript 描述文件中的全局类型

    index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
    </head>
    <body>
      <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
      <script src="./page.ts"></script>
      
    </body>
    </html>

    page.ts

    $(function () {
      $('body').html('<div>121212</div>');
      new $.fn.init()
    })
    执行 npm start("start": "parcel ./src/index.html")。这个时候浏览器弹出了111,但是编辑器还是会报错,提示 Cannot find name '$'. Do you need to install type definitions for jQuery? Try `npm i @types/jquery`。让我们安装 @types/jquery。因为在 ts 里面直接引用了 js,所以不能正确的识别,这个时候需要去写个类型注解文件,帮助去打通 ts 和 js 的鸿沟

    之前我们是安装别人写好的 .d.ts 文件。这次我们自己去写
     
    page.d.ts
    // 声明一个全局变量,叫做 $,接收一个函数,返回值是 void
    // declare var $: (param: () => void) => void;
    
    
    interface JqueryInstance {
      html: (html: string) => JqueryInstance
    }
    // 函数重载
    declare function $(readyFunc: () => void): void;// 定义全局函数 $可以接收一个函数,函数重载
    declare function $(selector: string): JqueryInstance;// 定义全局函数 $可以接收一个字符串,函数重载
    // 如何对对象进行定义,以及对类进行类型定义,以及命名空间的嵌套
    declare namespace $ { // $.fn.init
      namespace fn{
        class init{}
      }
    }
    
    // 使用 interface 的语法,实现函数重载
    // interface JQuery{
    //   (readyFunc: () => void): void;
    //   (selector: string): JqueryInstance
    // }// 直接这样写 ts 文件的 $ 还是会报错的,还需要定义
    // declare var $: JQuery;
  • 相关阅读:
    H
    饭卡(0 1背包)
    J
    H
    E
    3991: [SDOI2015]寻宝游戏
    CF 1051 F. The Shortest Statement
    CF 643 E. Bear and Destroying Subtrees
    4567: [Scoi2016]背单词
    4946: [Noi2017]蔬菜
  • 原文地址:https://www.cnblogs.com/wzndkj/p/13200937.html
Copyright © 2011-2022 走看看