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

 

posted @ 2022-01-10 14:37  眼里有激光  阅读(386)  评论(0编辑  收藏  举报