me

TypeScript 技巧


Project Reference

在一个项目 src 目录下有两个相对独立的模块,分别是 src1src2,其中他们都包含一系列的 .ts 文件

TS 类型来源

ts 中的 declare 语法可以单独声明变量的类型

//object
interface Person {
    name: string
    age?: number
}

declare const guang: Person

//function
declare function add(num1: number, num2: number): number

TS 模块化开发

命名空间

在 TypeScript 早期时,称之为内部模块,主要是将一个模块内部再惊醒作用域的划分,防止命名冲突

export namespace price {
  export function format(price: number) {
    return "99.99";
  }
}

类型查找

内置类型声明

外部定义类型声明

自定义声明

何时使用自定义声明

变量 - 函数 - 类的声明

declare let whyHeight: number;
declare function whyFoo(): void;
declare class Person {
  name: string;
  age: number;
  constructor(name: string, age: number);
}

声明模块

declare module "lodash" {
  export function join(arr: any[]): void;
}

声明文件

declare module "*.jpg" {
  const src: string;
  export default src;
}

在我们构建 vue 项目时,vue 会自己初始化一个shimes-vue.d.ts文件

declare module "*.vue" {
  import type { DefineComponent } from "vue";
  const component: DefineComponent<{}, {}, any>;
  export default component;
}

declare module "*.json";
//暴露两个全局属性
declare const $store: any;
declare const $filters: any;

设置别名

使用 vite 开发的时候,经常会使用类似 @ 的别名等情况,如果使用 TypeScript 来设置,需要在 tsconfig.json 来设置,再在 vite.config.ts 中设置 alias,这样才可以使用

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@/*": ["src/*"]
    }
  }
}