如何在项目中全局声明类型(打字稿)

时间:2017-02-03 13:47:41

标签: typescript

在打字稿项目中,   有没有办法声明一个类型并在所有文件中共享它,就像我们可以访问node.d.ts全局定义的类型一样?

例如,假设在我的项目中IUser

之类的东西
interface IUser {
   name: string,
   mail: string
 }

好的,我可以在common/interfaces.ts文件中创建该接口,并在每次需要时导入它...但是能够为整个项目全局声明这样的接口并快速访问将会非常好他们没有导入任何文件

3 个答案:

答案 0 :(得分:18)

您可以创建一个定义文件,以.d.ts扩展名结尾,并将其放在您喜欢的项目中:

<强> user.d.ts

interface IUser {
    name: string,
    mail: string
}

这也是填充缺失的全局类型的好方法。每个项目都有一个lib/global文件夹来放置这些文件。

这仅适用于类型定义,而不适用于实际代码,因为(1)实际代码必须以某种方式导入,(2).d.tsambient。此外,对于以这种方式定义为全局可见的类型,相应的声明文件不应包含顶级导出(否则声明文件将被视为模块,需要访问其类型的导入。)

您也可以声明模块:

declare module "my-module" {
    export declare class Something {
        public something: number;
    }
}

然后TypeScript将允许以下内容:

import { Something } from "my-module";

答案 1 :(得分:5)

您可以在多个文件中定义类型,并在其他文件中使用它们。有两种可能的方式:

  1. 文件使用相同的命名空间。在这种情况下,类型可以直接重用。
  2. 文件使用不同的命名空间。在这种情况下,可重用类型必须标有export。然后可以在其他名称空间中使用它。使用import语句,您可以避免使用名称空间前缀。
  3. 在任何情况下,您都必须添加要重复使用其类型的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());