ts类型声明文件的正确使用姿势

ts声明文件类型

npm install @types/jquery --save-dev

与npm一同发布

解释: package.json 中有 types 字段,或者有一个 index.d.ts 声明文件

自给自足型

创建一个 node_modules/@types/foo/index.d.ts 文件,存放 foo 模块的声明文件。不太建议用这种方案,一般只用作临时测试。

创建一个 types 目录,专门用来管理自己写的声明文件,将 foo 的声明文件放到 types/foo/index.d.ts 中。这种方式需要配置下 tsconfig.json 中的 paths 和 baseUrl 字段。

/path/to/project

├── src

| └── index.ts

├── types

| └── foo

| └── index.d.ts

└── tsconfig.json

{

"compilerOptions": {

"module": "commonjs",

"baseUrl": "./",

"paths": {

"*": ["types/*"]

}

}

}

ts声明文件书写姿势

全局型

# let

declare let jQuery: (selector: string) => any;

# function

declare function jQuery(selector: string): any;

#class

declare class Animal {

name: string;

constructor(name: string);

sayHi(): string;

}

#enum

declare enum Directions {

Up,

Down,

Left,

Right

}

#namespace

declare namespace jQuery {

function ajax(url: string, settings?: any): void;

namespace fn {

function extend(object: any): void;

}

}

npm包型 - export

// types/foo/index.d.ts

export const name: string;

export function getName(): string;

export class Animal {

constructor(name: string);

sayHi(): string;

}

export enum Directions {

Up,

Down,

Left,

Right

}

export interface Options {

data: any;

}

export namespace foo {

const name: string;

namespace bar {

function baz(): string;

}

}

npm包型 - export default

// types/foo/index.d.ts

# function、class 和 interface 可以直接默认导出,其他的变量需要先定义出来,再默认导出

export default function foo(): string;

export default Directions;

declare enum Directions {

Up,

Down,

Left,

Right

}

npm包型 - 先声明,在export

// types/foo/index.d.ts

declare const name: string;

declare function getName(): string;

declare class Animal {

constructor(name: string);

sayHi(): string;

}

declare enum Directions {

Up,

Down,

Left,

Right

}

#interface 前是不需要 declare

interface Options {

data: any;

}

export { name, getName, Animal, Directions, Options };

module 拓展

// types/foo-bar.d.ts

declare module 'foo' {

export interface Foo {

foo: string;

}

}

declare module 'bar' {

export function bar(): string;

}

// src/index.ts

import { Foo } from 'foo';

import * as bar from 'bar';

let f: Foo;

bar.bar();

三斜线指令

书写一个全局变量的声明文件

依赖一个全局变量的声明文件

// types/jquery-plugin/index.d.ts

///

declare function foo(options: JQuery.AjaxSettings): string;

ts文件tsc自动生成声明文件

命令行参数

--declaration(简写 -d)

tsconfig.json

{

"compilerOptions": {

"module": "commonjs",

"outDir": "lib",

"declaration": true,

}

}

ts发布

发布到社区

@types 是统一由 DefinitelyTyped 管理的。要将声明文件发布到 @types 下,就需要给 DefinitelyTyped 创建一个 pull-request,其中包含了类型声明文件,测试代码,以及 tsconfig.json 等。

与源码一起(依次查找*.d.ts)1. 给 package.json 中的 types 或 typings 字段指定一个类型声明文件地址

2. 在项目根目录下,编写一个 index.d.ts 文件

3. 针对入口文件(package.json 中的 main 字段指定的入口文件),编写一个同名不同后缀的 .d.ts 文件

参考

欢迎关注我们【前端漫漫】,了解最新文章动态!联系邮箱:simple2012hcz@126.com

class ts 扩展方法_ts类型声明文件的正确使用姿势相关推荐

  1. class ts 扩展方法_ts各种类型和用法

    运行期间做数据类型检查 js ruby python 编译期间类型检查 c c++ java ==冒号后面的都是类型== typescript 是 js 的超集 拥有静态类型 需要编译成 js 运行 ...

  2. class ts 扩展方法_一个class文件到底包含了哪些东西?

    通过对一个class文件的分析,基本理解了class文件结构,在这里最后再做一个总结,梳理下class文件内容. 两种结构 class文件内容如果泛化的区分可以分成两种结构: 1.字节数据:通过预先指 ...

  3. ts自动编译声明文件_TS 的声明文件

    打算为你的团队写一个封装好的工具?TS的声明文件是必不可少的,它不仅仅让你的工具支持TS,更是负责充当一个说明书的作用,让人对其的使用一目了然. 什么是声明语句?什么时候需要他? 假如我们想使用第三方 ...

  4. TypeScript 类型声明文件.d.ts

    文章目录 一.TS 中的两种文件类型 二.类型声明文件的使用说明 1. 使用已有的类型声明文件 1.1 内置类型声明文件 1.2 第三方库类型声明文件 1.2.1 库自带声明文件 1.2.2 Defi ...

  5. 【TypeScript笔记】03 - TS类型声明文件

    导读 开发环境 版本号 描述 node -v v14.18.3 npm -v 6.14.6 tsc -v 4.7.4 ts-node -v 10.9.1 概述 类型声明文件:用来为已存在的JS库提供类 ...

  6. VSCode 中,TS 提示 ”无法找到 *.vue 声明文件“ 的解决方案

    在使用 VSCode 开发 Vue3 + TS 项目时,编辑器一直有一个报错,因为不影响编译和运行,所以就一直没在意,但这两天看着这红杠提示实在是太别扭,今天就来解决一下这个问题,还自己一个清爽的开发 ...

  7. class ts 扩展方法_一些让程序保持可扩展的 TypeScript 技巧

    我们使用 TypeScript 的理由是,它有助于开发更快更安全的 app. TypeScript 默认会做很多简化,这有助于开发者更容易的上手,但从长远来看,这些简化也会浪费不少的开发时间. 我们收 ...

  8. class ts 扩展方法_如使用Typescript撸Vue(Vue2 + TS +TSX+CSS module)

    Vue对TS的支持一致不太好,连Vue作者尤大也自嘲真香压错了宝.期待Vue3.0会用TS重构且会有较大改进.不过目前有一些第三方的库可以曲线优化对TS的支持.主要就介绍下过下面两个库来写Vue. 总 ...

  9. class ts 扩展方法_JUnit 5自定义扩展

    前言 在org.junit.jupiter.api.extension包下,JUnit5提供了丰富的扩展接口,通过实现这些接口,我们可以定制自己的扩展并注册到JUnit中来实现功能扩展. Extens ...

最新文章

  1. mysql 硬盘缓存_paip.mysql性能跟iops的以及硬盘缓存的关系_MySQL
  2. 截取台风后的图片_Python数据分析案例 | 台风最喜欢在我国哪个省市登陆
  3. linux:如何修改用户的密码
  4. 【论文笔记】NLP 预训练模型综述
  5. uni-app 跨端开发注意事项
  6. SQL:postgreSQL借助日期函数Extract按照时间区分查询结果
  7. 湾区那些事儿 (二)
  8. Visual Studio自定义调试窗体两个小技巧
  9. 推荐一款3D插件可以用纯html+css打造3D效果
  10. t分布的定义和概率密度函数
  11. 自行车小组问卷调查报告
  12. GitHub 上很火的 7 个项目--架构思想精华
  13. 教你修改电脑mac地址图解教程
  14. BOXI3 SDK 检索所有使用了某个universe object的报表
  15. pixhawk固定翼起飞逻辑分析
  16. UML面向对象分析与建模
  17. 毕业设计-基于 MATLAB 的图像分割算法研究及实现
  18. A CLOSER LOOK AT DEEP LEARNING HEURISTICS: LEARNING RATE RESTARTS, WARMUP AND DISTILLATION
  19. 以前写的代码感觉很有用
  20. 数据结构(考研笔记)

热门文章

  1. 小记:再谈单例模式静态类区别优势
  2. WCF(学习笔记)【参见WCF教程】
  3. hdu 4417(树状数组+离线算法)
  4. LeetCode 88. 合并两个有序数组(Merge Sorted Array)
  5. NYOJ 138 找球号(二)哈希表
  6. Serverless的理解
  7. Jconsole配置与连接
  8. MongoDB学习笔记(2)
  9. mysql安装转自 http://www.cnblogs.com/azhw/p/5143232.html
  10. angularJS 表单验证