zoukankan      html  css  js  c++  java
  • ts 【申明文件】

    前言

      在项目开发过程中,我们可能回在ts中使用到一些js全局,如jquery。以jquery举例,假设js版本的jquery作为一个全局库,而非使用import或require引入。那么如何在ts中像js一样直接使用$变量呢?ts的语法检测不会允许我们使用一个未经定义的变量,即便它已经同伙jquery.main.js在window上挂载。这时候就可以使用ts的声明文件*.d.ts。申明文件的作用就是:

      告诉ts,某个 变量 或 function 或者 模块 是存在的,不需要ts去校验,我确定它存在

    列子

      声明变量

    declare var foo: number; //声明一个全局变量
    console.log(foo);//直接使用  

      声明方法

    declare function greet(greeting: string): void; //声明一个方法
    greet('test string') //直接使用

      声明命名空间

    //声明一个命名空间,可以当作{}类型的变量来使用
    declare namespace testName {
      const testName: string;
      interface testInter {
        age: number;
      }
    }
     //直接使用变量testName
      console.log(testName.testName);
      //直接使用接口 testInter
      const a: testName.testInter = {
        age: 1245,
      };

      声明模块

    //新增less module 测试
    declare module "*.module.less" {
      //定义一个变量类型
      const normal: {
        prop1: string;
        prop2: string2;
        readonly [key: string]: string;
      };
      // 将其抛出
      export default normal;
    }
    import s from "./index.module.less";
    //所有匹配*.module.less引入的模块,都具有声明的属性
    console.log(s.prop1);
    console.log(s.prop2);

    值得注意的

      1. 不要在声明文件*.d.ts中初始化声明对象,要记住,声明文件仅仅是负责声明目标存在,而不是定义它

    //定义目标
    declare const name1: string = "init prop name1";
    console.log(name1); //error not defined

       2. 在使用声明的目标时,一定要保证目标已经被定义

    //index.d.ts
    declare const name1: string;//定义目标
    //app.ts
    console.log(name1);//error:not defined

        引入定义声明的js文件

     //init.js
    window.name1 = "init prop name1";
    //先引入init.js
    import "./init";
    console.log(name1); //init prop name
  • 相关阅读:
    【转载】Chrome 0day漏洞:不要用Chrome查看pdf文件
    内网渗透闲谈
    Sticky Fingure安装教程
    局域网下交换机配置
    Access 2010 应用基础 单元三:SQL查询
    ESP8266 wifi干扰、钓鱼实现
    这是谁的锅
    svn/git的diff、patch
    sublime开发php必备工具集合(mac)
    gcc学习笔记
  • 原文地址:https://www.cnblogs.com/wrhbk/p/15784316.html
Copyright © 2011-2022 走看看