在一个打字稿项目中,有没有办法声明一个类型并在所有文件中共享它,就像我们可以访问全局定义的类型一样node.d.ts?
例如,让我们说在我的项目中,a IUser就是这样的东西
interface IUser {
name: string,
mail: string
}
Run Code Online (Sandbox Code Playgroud)
好的,我可以在一个common/interfaces.ts文件中创建该接口并在每次需要时导入它...但是能够为整个项目全局声明这样的接口并且可以快速访问它们而不导入任何文件会很好
Joh*_*isz 26
您可以创建一个定义文件,以.d.ts扩展名结尾,并将其放在您喜欢的项目中:
user.d.ts
interface IUser {
name: string,
mail: string
}
Run Code Online (Sandbox Code Playgroud)
这也是填充缺失的全局类型的好方法.lib/global每个项目都有一个文件夹来放置这些文件.
注意:这仅适用于类型定义,而不适用于实际代码,因为(1)实际代码必须以某种方式导入,(2)
.d.ts是环境代码.此外,对于以这种方式定义为全局可见的类型,相应的声明文件不应包含顶级导出(否则声明文件将被视为模块,需要导入才能访问其类型).
您可以在多个文件中定义类型,并在其他文件中使用它们。有两种可能的方法:
export。然后可以在其他名称空间中使用它。使用该import语句,您可以避免必须使用名称空间前缀。相同的名称空间
文件1:
namespace Example {
export interface IUser {
name: string,
mail: string
}
}
Run Code Online (Sandbox Code Playgroud)
档案2:
/// <reference path="./File1.ts" />
namespace Example {
class User implements IUser {
name: string,
mail: string
}
}
Run Code Online (Sandbox Code Playgroud)
不同的名称空间
文件1:
namespace Example {
export interface IUser {
name: string,
mail: string
}
}
Run Code Online (Sandbox Code Playgroud)
文件2(不导入):
/// <reference path="./File1.ts" />
class User implements Example.IUser {
name: string,
mail: string
}
Run Code Online (Sandbox Code Playgroud)
文件2(含导入):
/// <reference path="./File1.ts" />
import IUser = Example.IUser;
class User implements IUser {
name: string,
mail: string
}
Run Code Online (Sandbox Code Playgroud)
在项目根目录中创建 global.d.ts。
这是如何声明全局类型常量和接口的示例,这些常量和接口将被全局理解
//example import for externally loaded library
//this will not form part of the bundle but will allow typescript to understand external libraries throughout the project
import _ from 'lodash';
declare global {
//Example global constant for libraries served via webpack externals. example webpack config:: externals: { _: 'lodash' }
//This assumes lodash was already load in DOM for example in <head> via CDN link before main.js is loaded.
const _: typeof _;
//example of custom types
type JSONPrimitive = string | number | boolean | null;
type JSONValue = JSONPrimitive | JSONObject | JSONArray;
type JSONObject = { [member: string]: JSONValue };
//example of custom interface
interface JSONArray extends Array<JSONValue> {}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14236 次 |
| 最近记录: |