做网站备案要处省的电话号码,北京网站设计公司兴田德润信任高,事业单位网站建设算固定资产吗,小程序需不需要服务器1 declare 做外部声明1.1 声明外部类型1.2 声明外部模块1.2.1 解决引入资源模块报错1.2.2 跳过对第三方库的类型检查 1.3 声明外部变量1.4 声明外部命名空间#xff08;作用域#xff09; 2 .d.ts 文件做外部声明3 declare global {} 在模块中做外部声明 先说一下我对 .d.ts文… 1 declare 做外部声明1.1 声明外部类型1.2 声明外部模块1.2.1 解决引入资源模块报错1.2.2 跳过对第三方库的类型检查 1.3 声明外部变量1.4 声明外部命名空间作用域 2 .d.ts 文件做外部声明3 declare global {} 在模块中做外部声明 先说一下我对 .d.ts文件 和 declare 的理解.d.ts文件 和 declare 都是用来做
外部声明 的而 .d.ts 文件做外部声明是 declare 做外部声明的简化形式。 备注 我理解 外部声明 就是 声明全局类型或者模块可以直接引用而不用去 import 或者 import type 相应的变量或者类型。 1 declare 做外部声明
如果 types.ts 文件在 ts 编译范围内的情况下在 types.ts 文件中通过 declare 声明的变量、类型或者模块是全局性的即可以在不导入类型的情况下直接使用。 1. 何为 types.ts 文件在 ts 编译范围内的情况下 在 TS 配置文件tsconfig.js中通过 include 选项设置的编译范围内包含 types.ts 文件。 2. 用 declarre 声明的变量、类型或者模块不能全局使用的情况 types.ts 文件不能是模块即文件内不用有导入/导出语句importimport typeexportexport type。如果文件中包含导入导出语句types.ts 文件中的声明将失去全局性必须导出声明并在使用时先导入否则会报错。 1.1 声明外部类型
// ajax 请求方式
declare type AjaxType GET | POST | DELETE | PUT | PATCH;1.2 声明外部模块
1.2.1 解决引入资源模块报错
declare module *.css;
declare module *.scss;
declare module *.png;此例中不对导入的资源模块进行类型检查。如果不进行以上声明导入 css/less/png 等资源文件时会提示编译错误。
1.2.2 跳过对第三方库的类型检查
declare module jquery;如果想要使用一些用js 编写的第三方库可以通过声明外部模块跳过对第三方库的类型检查 此例中jquery模块中所有成员的类型都成了any类型这等同于不对jQuery进行类型检查。
1.3 声明外部变量
declare var a: boolean;
declare let b: boolean;
declare const c: boolean;如果外部变量声明中没有使用类型注解那么变量的类型为 any类型。
这个什么情况下会用到呢假如我在项目中引入了一个sdk这个sdk我们以微信的sdk为例里面有一些全局的对象比如wx但是如果不经过任何的声明在ts文件里面直接用wx.config()的话肯定会报错。
declare就是告诉 TS编译器 你担保这些变量和模块存在并声明了相应类型编译的时候按照声明的类型进行类型检查如果没有声明类型默认是 any 类型。
1.4 声明外部命名空间作用域
declare namespace API {var a: boolean;let b: boolean;const c: boolean;function foo(bar: string, baz: boolean): void;
}外部命名空间的成员默认为导出成员不需要使用export关键字来明确地导出它们但使用了export关键字也没有错误。
声明完之后在其他 ts文件中就可以直接 API.xxx 引用。
2 .d.ts 文件做外部声明
和 declare 做外部声明一样 .d.ts 文件例如types.d.ts在 ts 编译范围内且 .d.ts 文件不是模块的情况下文件中声明的变量、类型或者模块都是外部声明。只不过在 .d.ts 文件中的声明可以省略 declare。
// types.d.ts文件中
type PlainObjectTypeT any { [propType: string]: T };
// declare type PlainObjectTypeT any { [propType: string]: T };以上两种声明都是外部声明效果相同。 注意 1. .d.ts 文件提供的声明仅在编译阶段有效 .d.ts 文件中只提供类型声明不提供任何值如字符串和函数实现等在编译TypeScript程序的过程中.d.ts文件 不会生成对应的 .js文件。 2. .d.ts 文件不能是模块 .d.ts 文件不能是模块即文件内不用有导入/导出语句importimport typeexportexport type。如果文件中包含导入导出语句.d.ts 文件中的声明将失去全局性必须导出声明并在使用时先导入否则会报错。 3 declare global {} 在模块中做外部声明
使用 declare global {} 可以实现在模块中做外部声明。以下示例中 MainMenuType 类型 就是外部接口类型在其他模块中不用引入就可以直接使用。 UserType 类型 在其他模块中需要引入才能使用。
import { createSlice } from reduxjs/toolkit;
import type { PayloadAction } from reduxjs/toolkit;declare global {interface MainMenuType {eventCode: string,businessCode: string,menuOrder: number,icon: string,menuId: string,menuPid: string,isMultiple: boolean,menuName: string,menuType: string,menuGroup: string,menuAttestWay: string,children?: MainMenuType[]}
}export interface UserType {common: PlainObjectType,mainMenus: MainMenuType[],[key: string]: any
}