我最近在阅读React源代码,发现所有文件都是
.js
而不是.ts
更让我震惊的是,在那些
.js
文件中,它们实际上使用的是TypeScript语法,包括类型和所有内容......
这可能是超级无知,但这是否是某种高级黑魔法?
几天后回答我自己的问题: (感谢@Evert)
以防万一其他人将来有同样的问题,React 源代码是用 Flow 编写的。文件扩展名仍然是
.js
,并且这些文件中有类型。如果未安装 Flow,vsCode 无法理解它是什么,只会报告一堆错误...
您可以将类型粘贴到 JavaScript 代码中,这称为“TypeScript 类型声明”,扩展名为 .d.ts。当 TypeScript(或者带有智能感知的编辑器)看到一个 javascript 文件和一个同名的 .d.ts 文件时,它将从该文件导入类型定义。
有一个项目旨在为每个 JavaScript 库提供类型定义,也许您听说过谈论DefinitelyTyped。
例如:
// example.js
function hello(name) {
console.log(`Hello ${name}!`);
}
// example.d.ts
function hello(name: string);
// main.ts
import { hello } from 'example';
hello(42); // Error! "name" must be a string
相同的系统已用于在 React 中提供类型