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
  • 相关阅读:
    [CSP-S模拟测试]:Merchant(二分答案)
    [CSP-S模拟测试]:回文(hash+二维前缀和)
    [CSP-S模拟测试]:排列组合(数学 or 找规律)
    [CSP-S模拟测试]:X国的军队(贪心)
    BZOJ3714 [PA2014]Kuglarz 【最小生成树】
    BZOJ3922 Karin的弹幕 【线段树】
    BZOJ3495 PA2010 Riddle 【2-sat】
    BZOJ2597 [Wc2007]剪刀石头布 【费用流】
    hdu6184 Counting Stars 【三元环计数】
    BZOJ4815 [CQOI2017]小Q的表格 【数论 + 分块】
  • 原文地址:https://www.cnblogs.com/wrhbk/p/15784316.html
Copyright © 2011-2022 走看看