在打字稿项目中,
有没有办法声明一个类型并在所有文件中共享它,就像我们可以访问node.d.ts
全局定义的类型一样?
例如,假设在我的项目中IUser
是
interface IUser {
name: string,
mail: string
}
好的,我可以在common/interfaces.ts
文件中创建该接口,并在每次需要时导入它...但是能够为整个项目全局声明这样的接口并快速访问将会非常好他们没有导入任何文件
答案 0 :(得分:18)
您可以创建一个定义文件,以.d.ts
扩展名结尾,并将其放在您喜欢的项目中:
<强> user.d.ts 强>
interface IUser {
name: string,
mail: string
}
这也是填充缺失的全局类型的好方法。每个项目都有一个lib/global
文件夹来放置这些文件。
这仅适用于类型定义,而不适用于实际代码,因为(1)实际代码必须以某种方式导入,(2).d.ts
为ambient。此外,对于以这种方式定义为全局可见的类型,相应的声明文件不应包含顶级导出(否则声明文件将被视为模块,需要访问其类型的导入。)
您也可以声明模块:
declare module "my-module" {
export declare class Something {
public something: number;
}
}
然后TypeScript将允许以下内容:
import { Something } from "my-module";
答案 1 :(得分:5)
您可以在多个文件中定义类型,并在其他文件中使用它们。有两种可能的方式:
export
。然后可以在其他名称空间中使用它。使用import
语句,您可以避免使用名称空间前缀。在任何情况下,您都必须添加要重复使用其类型的a reference to the file。
相同的命名空间
文件1:
namespace Example {
export interface IUser {
name: string,
mail: string
}
}
文件2:
/// <reference path="./File1.ts" />
namespace Example {
class User implements IUser {
name: string,
mail: string
}
}
不同的名称空间
文件1:
namespace Example {
export interface IUser {
name: string,
mail: string
}
}
文件2(无导入):
/// <reference path="./File1.ts" />
class User implements Example.IUser {
name: string,
mail: string
}
文件2(带导入):
/// <reference path="./File1.ts" />
import IUser = Example.IUser;
class User implements IUser {
name: string,
mail: string
}
答案 2 :(得分:5)
在项目根目录中创建global.d.ts。
这里是如何声明全局类型常量和将被全局理解的接口的示例
XeroConfiguration xeroConfig = new XeroConfiguration();
xeroConfig.ClientId = "****";
xeroConfig.ClientSecret = "****";
xeroConfig.CallbackUri = new Uri("http://localhost"); //default for standard webapi template
xeroConfig.Scope = "openid profile email files accounting.transactions accounting.contacts offline_access";
var client2 = new XeroClient(xeroConfig, httpClientFactory);
var test = client2.BuildLoginUri();
return Redirect(client2.BuildLoginUri());