TypeScript 书写 .d.ts 文件的一些注意事项
Do’s and Don’ts
永远不要使用类型 Number、String、Boolean、Symbol 或 Object. 这些类型是指几乎从未在 JavaScript 代码中正确使用的非原始装箱对象。
下列用法不推荐:
function reverse(s: String): String;
应该使用下列用法:
function reverse(s: string): string;
any
除非您正在将 JavaScript 项目迁移到 TypeScript,否则不要使用 any 作为类型。 编译器有效地将 any 视为“请关闭此内容的类型检查”。 它类似于在变量的每个用法周围放置@ts-ignore 注释。 当您第一次将 JavaScript 项目迁移到 TypeScript 时,这会非常有用,因为您可以将尚未迁移的内容的类型设置为任何类型,但是在完整的 TypeScript 项目中,您将禁用对程序的任何部分进行类型检查 用它。
如果您不知道要接受什么类型,或者当您想接受任何东西时,因为您会盲目地传递它而不与它交互,则可以使用 unknown.
Return Types of Callbacks
不要将返回类型 any 用于其值将被忽略的回调。下列用法不推荐:
function fn(x: () => any) {x();
}
正确做法:使用类型 void 替代 any:
function fn(x: () => void) {x();
}
原因:使用 void 更安全,因为它可以防止您以未经检查的方式意外使用 x 的返回值。
function fn(x: () => void) {var k = x(); // oops! meant to do something elsek.doSomething(); // error, but would be OK if the return type had been 'any'
}
Return Types of Callbacks
尽量避免在回调函数里定义 optional 参数,除非你觉得实在有必要。
interface Fetcher {getObject(done: (data: any, elapsedTime?: number) => void): void;
}
这有一个非常具体的含义:done 回调可能用 1 个参数调用,也可能用 2 个参数调用。 作者可能打算说回调可能不关心 elapsedTime 参数,但是没有必要使参数成为可选参数来实现这一点——提供接受更少参数的回调总是合法的。
重载和回调函数
不要编写仅在回调数量上有所不同的单独重载:
declare function beforeAll(action: () => void, timeout?: number): void;
declare function beforeAll(action: (done: DoneFn) => void,timeout?: number
): void;
请使用最大数量编写单个重载:
declare function beforeAll(action: (done: DoneFn) => void,timeout?: number
): void;
函数重载的定义顺序
不要在更具体的重载之前放置更一般的重载:
declare function fn(x: any): any;
declare function fn(x: HTMLElement): number;
declare function fn(x: HTMLDivElement): string;
var myElem: HTMLDivElement;
var x = fn(myElem); // x: any, wat?
正确做法:从具体到一般
declare function fn(x: HTMLDivElement): string;
declare function fn(x: HTMLElement): number;
declare function fn(x: any): any;
var myElem: HTMLDivElement;
var x = fn(myElem); // x: string, :)
原因:
TypeScript 在解析函数调用时选择第一个匹配的重载。 当较早的重载比较晚的重载“更通用”时,较晚的重载实际上是隐藏的并且无法调用。
使用可选参数
不要写几个只在尾随参数上不同的重载:
/* WRONG */
interface Example {diff(one: string): number;diff(one: string, two: string): number;diff(one: string, two: string, three: boolean): number;
}
正确做法:尽量使用可选参数:
interface Example {diff(one: string, two?: string, three?: boolean): number;
}
使用联合类型
不要编写仅在一个参数位置上因类型不同而不同的重载:
/* WRONG */
interface Moment {utcOffset(): number;utcOffset(b: number): Moment;utcOffset(b: string): Moment;
}
尽可能使用联合类型:
/* OK */
interface Moment {utcOffset(): number;utcOffset(b: number | string): Moment;
}
TypeScript 书写 .d.ts 文件的一些注意事项相关推荐
- TypeScript 里 .d.ts 文件的用处
StackOverflow 讨论 "d.ts"文件用于为 TypeScript 提供有关用 JavaScript 编写的 API 的类型信息.这个想法是你正在使用像jQuery 或 ...
- php 得到 ts文件,获取TypeScript声明文件.d.ts步骤详解
这次给大家带来获取TypeScript声明文件.d.ts步骤详解,获取TypeScript声明文件.d.ts的注意事项有哪些,下面就是实战案例,一起来看一下. 一.TypeScript的声明文件就像C ...
- TypeScript基础 ts文件的创建与执行
创建 1.新建一个文件夹 2.用vscode打开 3.在文件夹下新建一个hello.ts的文件 执行 在ts文件中输入代码console.log('111') 因为node.js不能直接读取ts代码 ...
- ieda ts文件报错_Java开发平台IntelliJ IDEA教程:开发,运行和调试TypeScript源代码-IntelliJ IDEA系列教程:-慧都网...
Java开发平台开发,运行和调试TypeScript源代码 IntelliJ IDEA是Java语言开发的集成环境,IntelliJ在业界被公认为优秀的Java开发工具之一,尤其在智能代码助手.代码自 ...
- JavaScript 和 TypeScript 交叉口 —— 类型定义文件(*.d.ts)
在 <从 JavaScript 到 TypeScript 系列> 文章我们已经学习了 TypeScript 相关的知识. TypeScript 的核心在于静态类型,我们在编写 TS 的时候 ...
- Cocos Creator TypeScript 中使用ProtoBuf(利用工具把proto文件生成对应的js文件以及ts文件)
我是一枚刚入坑cocos的小白o(╯□╰)o 开发环境:Cocos Creator 1.9 (需要安装Node.js,使用npm命令) 在网上找了很久都是讲的protobuf.js的用法,但是没有 ...
- TypeScript 初体验:第一个 TS 文件
步骤 1. 创建ts文件: ① 在桌面中创建文件夹:code. ② 在文件夹上点击鼠标右键,然后点击 Open With Code(用VSCode打开文件夹). ③ 在 VSCode 中新建ts文件: ...
- TypeScript 里 tsconfig.json 文件的作用
What is a tsconfig.json 目录中存在 tsconfig.json 文件表明该目录是 TypeScript 项目的根目录. tsconfig.json 文件指定了编译项目所需的根文 ...
- 在vscode中用tsc编译ts文件的时候报错,tsc : 无法加载文件,因为在此系统上禁止运行脚本;SecurityError
一.问题描述: 1. TypeScript安装成功,在C盘的Administrator目录下,运行 tsc -v 也可看到TypeScript的版本. 2. 但在vscode中的时候运行tsc 编译t ...
最新文章
- 语义分割--End-to-End Instance Segmentation with Recurrent Attention
- boost::spirit::classic相关的测试程序
- 在OUTLOOK或OWA中查看邮件的SCL级别(转)
- idea中隐藏.idea文件夹和.iml文件
- Shell 判断文件或文件夹是否存在(不存在则创建)
- Eclipse的JavaWeb项目导入到IntelliJ IDEA 并且配置Tomcat
- GaussDB(for MySQL)如何在存储架构设计上做到高可靠、高可用
- leaflet自定标签json_Windows Terminal更新后,自定义配置失效?快捷键无法使用?
- LeetCode 49. Group Anagrams
- Word2Vec在中文的应用
- asp.net网站后台退出后,点后退按钮仍能进,如何安全退出
- 《Redis设计与实现》读书笔记
- 愿你出走半生,归来仍是少年——2017年半年总结(下)
- NW.JS 客户端开发入坑指南
- 全球裁员潮,Salesforce职业能否抵御风险?
- 平面设计之CDR文本绘图工具总结
- python数据可视化第七节(绘制3D图表和统计地图)
- 关于拖延症的一些小思考
- Erlang JAM二三话
- 新冠病毒是人造?科学解释为何阴谋论错得离谱