编写d.ts文件步骤详解

这次给大家带来编写d.ts文件步骤详解,编写d.ts文件的注意事项有哪些,下面就是实战案例,一起来看一下。

前言

本文主要讲怎么写一个typescript的描述文件(以d.ts结尾的文件名,比如xxx.d.ts)。

最近开始从js转ts了。但是要用到一些描述文件(d.ts),常用的比如jquery等都可以通过 npm下载到别人已经写好的npm install @types/jquery。但是还是有一些小众的或者公司内部的公共库或者以前写过的公用js代码需要自己手动写描述文件。

之前也从网上面也找了一些资料,但还是看的云里雾里模糊不清,经过一段摸索,将摸索的结果记录下来,也希望可以给别人一个参考。

如果你只写js,d.ts对你来说也是有用的,大部分编辑器能识别d.ts文件,当你写js代码的时候给你智能提示。效果像这样:

编写d.ts文件步骤详解

详情可以看我以前写过的一些文章:http://www.jb51.net/article/138211.htm

通常,我们写js的是时候有两种引入js的方式:

1,在html文件中通过标签全局引入全局变量。

2,通过模块加载器require其他js文件:比如这样var j=require(‘jquery’)。

全局类型

首先以第一种方式举例。

变量

比如现在有一个全局变量,那对应的d.ts文件里面这样写。

declare var aaa:number

登录后复制

其中关键字declare表示声明的意思。全局变量是aaa,类型是数字类型(number)。当然了也可以是string类型或者其他或者:

declare var aaa:number|string //注意这里用的是一个竖线表示"或"的意思

登录后复制

如果是常量的话用关键字const表示:

declare const max:200

登录后复制

函数

由上面的全局变量的写法我们很自然的推断出一个全局函数的写法如下:

/** id是用户的id,可以是number或者string */decalre function getName(id:number|string):string

登录后复制

最后的那个string表示的是函数的返回值的类型。如果函数没有返回值可以用void表示。

在js里面调用的时候就会提示:

编写d.ts文件步骤详解

我们上面写的注释,写js的时候还可以提示。

有时候同一个函数有若干种写法:

编写d.ts文件步骤详解

get(1234)get("zhangsan",18)

登录后复制

那么d.ts对应的写法:

declare function get(id: string | number): stringdeclare function get(name:string,age:number): string

登录后复制

如果有些参数可有可无,可以加个?表示非必须。

declare function render(callback?:()=>void): string

登录后复制

js中调用的时候,回调传不传都可以:

render()render(function () { alert('finish.')})

登录后复制

class

当然除了变量和函数外,我们还有类(class)。

declare class Person { static maxAge: number //静态变量 static getMaxAge(): number //静态方法 constructor(name: string, age: number) //构造函数 getName(id: number): string }

登录后复制

constructor表示的是构造方法:

编写d.ts文件步骤详解 

编写d.ts文件步骤详解 

其中static表示静态的意思,用来表示静态变量和静态方法:

编写d.ts文件步骤详解 

编写d.ts文件步骤详解 

对象

declare namespace OOO{ }

登录后复制

当然了这个对象上面可能有变量,可能有函数可能有类。

declare namespace OOO{ var aaa: number | string function getName(id: number | string): string class Person { static maxAge: number //静态变量 static getMaxAge(): number //静态方法 constructor(name: string, age: number) //构造函数 getName(id: number): string //实例方法 }}

登录后复制

其实就是把上面的那些写法放到这个namespace包起来的大括号里面,注意括号里面就不需要declare关键字了。
效果:

编写d.ts文件步骤详解 

编写d.ts文件步骤详解 

编写d.ts文件步骤详解 

对象里面套对象也是可以的:

declare namespace OOO{ var aaa: number | string // ... namespace O2{ let b:number }}

登录后复制

效果:

编写d.ts文件步骤详解 

混合类型

有时候有些值既是函数又是class又是对象的复杂对象。比如我们常用的jquery有各种用法:

new $()$.ajax()$()

登录后复制

既是函数又是对象

declare function $2(s:string): voiddeclare namespace $2{ let aaa:number}

登录后复制

效果:

作为函数用:

编写d.ts文件步骤详解

作为对象用:

编写d.ts文件步骤详解

也就是ts会自动把同名的namespace和function合并到一起。

既是函数,又是类(可以new出来)

// 实例方法 interface People{ name: string age: number getName(): string getAge():number}interface People_Static{ new (name: string, age: number): People /** 静态方法 */ staticA():number  (w:number):number}declare var People:People_Static

登录后复制

效果:

作为函数使用:

编写d.ts文件步骤详解

类的静态方法:

编写d.ts文件步骤详解

类的构造函数:

编写d.ts文件步骤详解

类的实例方法:

编写d.ts文件步骤详解

模块化

除了上面的全局的方式,我们有时候还是通过require的方式引入模块化的代码。

比如这样的效果:

编写d.ts文件步骤详解 

对应的写法是这样的:

declare module "abcde" { export let a: number export function b(): number export namespace c{  let cd: string } }

登录后复制

其实就是外面套了一层 module “xxx”,里面的写法和之前其实差不多,把declare换成了export。

此外,有时候我们导出去的是一个函数本身,比如这样的:

编写d.ts文件步骤详解 

对应的写法很简单,长这个样子:

declare module "app" { function aaa(some:number):number  export=aaa }

登录后复制

以此类推,导出一个变量或常量的话这么写:

declare module "ccc" { const c:400  export=c }

登录后复制

效果:

编写d.ts文件步骤详解 

UMD

有一种代码,既可以通过全局变量访问到,也可以通过require的方式访问到。比如我们最常见的jquery:

 编写d.ts文件步骤详解

编写d.ts文件步骤详解

其实就是按照全局的方式写d.ts,写完后在最后加上declare namespace “xxx”的描述:

declare namespace UUU{ let a:number} declare module "UUU" { export =UUU}

登录后复制

效果这样:

作为全局变量使用:

编写d.ts文件步骤详解

作为模块加载使用:

编写d.ts文件步骤详解

其他

有时候我们扩展了一些内置对象。比如我们给Date增加了一个format的实例方法:

编写d.ts文件步骤详解 

对应的d.ts描述文件这样写:

interface Date { format(f: string): string}

登录后复制

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

jQuery实现鼠标点击悬浮特效

angular6.0实现组件懒加载功能(附代码)

以上就是编写d.ts文件步骤详解的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2766329.html

(0)
上一篇 2025年3月8日 11:13:13
下一篇 2025年3月2日 08:08:58

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 实现圆弧形拖动进度条步骤详解

    这次给大家带来实现圆弧形拖动进度条步骤详解,实现圆弧形拖动进度条的注意事项有哪些,下面就是实战案例,一起来看一下。 先上效果图 因为需求需要实现这个效果图 非原生实现, 难点1:绘制 使用svg 难点2:点击事件的处理 难点3:封装 由于绘…

    2025年3月8日
    200
  • JS实现JSON数组去重步骤详解

    这次给大家带来JS实现JSON数组去重步骤详解,JS实现JSON数组去重的注意事项有哪些,下面就是实战案例,一起来看一下。 需求描述:去除JSON数组中paymode字段相同的项,并将paymoney累加。 paylist:[{paymod…

    编程技术 2025年3月8日
    200
  • vue-cli 3.0.x 入门详解

    这次给大家带来vue-cli 3.0.x 入门详解,vue-cli 3.0.x 使用的注意事项有哪些,下面就是实战案例,一起来看一下。 最近项目正在优化。乘着有时间看了一下 vue-cli3.0.x 使用 。感觉还蛮不错的。 因为之前项目使…

    编程技术 2025年3月8日
    200
  • select内置组件使用详解

    这次给大家带来select内置组件使用详解,select内置组件使用的注意事项有哪些,下面就是实战案例,一起来看一下。 1.整合了第三方 jQuery 插件 (select2) html, body { font: 13px/18px sa…

    2025年3月8日
    400
  • vue.js中安装npm步骤详解

    这次给大家带来vue.js中安装npm步骤详解,vue.js中安装npm的注意事项有哪些,下面就是实战案例,一起来看一下。 node.js是javascript的一种运行环境,是对Google V8引擎进行的封装。是一个服务器端的javas…

    2025年3月8日 编程技术
    200
  • vue2.0实现注册登录步骤详解

    这次给大家带来vue2.0实现注册登录步骤详解,vue2.0实现注册登录的注意事项有哪些,下面就是实战案例,一起来看一下。 前言 前段时间和公司一个由技术转产品的同事探讨他的职业道路,对我说了一句深以为然的话: “不要把自己禁锢在某一个领域…

    2025年3月8日
    200
  • bing Map使用步骤详解

    这次给大家带来bing Map使用步骤详解,bing Map使用的注意事项有哪些,下面就是实战案例,一起来看一下。 写在最前面 拥有全球数据库国内好像就只有百度地图有,高德、搜狗、腾讯的都不行,但是由于百度地图的数据更新不及时,所以在做相关…

    2025年3月8日 编程技术
    200
  • code spliting优化Vue打包步骤详解

    这次给大家带来code spliting优化Vue打包步骤详解,code spliting优化Vue打包的注意事项有哪些,下面就是实战案例,一起来看一下。 在http1的时代,比较常见的一种性能优化就是合并http的请求数量,通常我们会把许…

    2025年3月8日 编程技术
    200
  • vue-cli多模块打包使用详解

    这次给大家带来vue-cli多模块打包使用详解,vue-cli多模块打包的注意事项有哪些,下面就是实战案例,一起来看一下。 场景 在实际的项目开发中会出现这样的场景,项目中需要多个模块(单页或者多页应用)配合使用的情况,而vue-cli默认…

    编程技术 2025年3月8日
    200
  • webpack热刷新与热加载使用详解

    这次给大家带来webpack热刷新与热加载使用详解,webpack热刷新与热加载使用的注意事项有哪些,下面就是实战案例,一起来看一下。 webpack非常的强大,合理的脚手架可以为我们的工作省去众多繁琐无意义的工作。其中热刷新、热加载相较于…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论