TypeScript 学习
1. typescript 中的declare 表示声明 一个类或接口后,可以不引入既可以被编译器识别,做为类型使用
如: 在 a.ts 中 定义了
declare class A{ name:string; age:number; }
在b.ts 中可以使用
let a:A = {name:"12",age:12};
在vscode 中不会报错,但是使用 tsc 编译 b.ts 会报错,因为没有引入A.,如果import 了 A就可以正常编译成js.
但是奇怪的是在 vue 的typescript 版本中使用可以正常打包(是ts-loader 作了处理),在不引入类型的情况下使用,可以作为 接口返回类型的约定,或只作为类型不使用new 创建。
2. d.ts 是声明文件。d.ts里面的东西不能被引入,只能作为类型来用,d.ts里面的东西也不会被编译成js,只是作为编译阶段被识别。
d.ts 可以作为 js的声明文件来使用(在js中是无法引入js的)。
例如:有一个 a.js
function A(){ console.log("我是A"); } export default A;
在 main.ts中如果引入
import A from "./a.js" //编译器会报错。
新增一个 a.d.ts
declare let A :()=>void; export default A; //需要导出才能引用
这时在main.ts 改成 如下,不会报错。实际编译后引入的是t.js。
import A from "./t.js" A();
使用ts-loader + webpack 打包main.ts 后得到的 是调用t.js 中的A。
实际上d.ts 只是作为一个声明作用,只在编译阶段器识别作用。
完整打包例子 https://github.com/muyiwei/Typescript-