代码之家  ›  专栏  ›  技术社区  ›  user1283776

以尽可能少的重复从另一个文件导入声明?

  •  0
  • user1283776  · 技术社区  · 7 年前

    客户端类型

    declare module 'client-types' {
        export interface IRequestBody { type: 'request' }
        export interface CreateProjectRequestBody extends IRequestBody { cmd: 'otii_create_project' }
        export interface GetArcsRequestBody extends IRequestBody { cmd: 'otii_get_devices' }
        export interface OpenProjectRequestBody extends IRequestBody { cmd: 'otii_open_project', payload: { value: string, force: boolean, progress: boolean } }
    
        export interface IResponse {}
        export interface CreateProjectResponse extends IResponse { payload: { project_id: number } }
        export interface GetArcsResponse extends IResponse { payload: { devices: [ { device_id: number, name: string, type: string } ] } }
        export interface OpenProjectResponse extends IResponse { payload: { project_id: string } }
    
        export interface ResponseDevice { device_id: number, name: string, type: string }
    
        export interface CreateProjectResponseData { id: number }
        export interface GetArcsResponseData { [index: number]: {id: number, name: string} }
        export interface OpenProjectResponseData { id: number }
    }
    

    索引

    // imports
    import { 
        IRequestBody, 
        CreateProjectRequestBody, 
        GetArcsRequestBody, 
        OpenProjectRequestBody,
        IResponse,
        CreateProjectResponse,
        GetArcsResponse,
        OpenProjectResponse,
        ResponseDevice,
        CreateProjectResponseData,
        GetArcsResponseData,
        OpenProjectResponseData
    } from 'client-types';
    
    // use
    request(body: CreateProjectRequestBody) : Promise<CreateProjectResponse>
    request(body: GetArcsRequestBody) : Promise<GetArcsResponse>
    request(body: OpenProjectRequestBody) : Promise<OpenProjectResponse>
    request<T extends IRequestBody>(body: T): Promise<IResponse> {
        ...
    }
    
    async createProject() : Promise<CreateProjectResponseData> { 
        ...
    }
    

    import * from from 'client-types';
    

    [ts] 'as' expected.

    有没有办法消除这种重复(就像我感觉的那样),或者我已经在使用“最佳实践”?

    PS:我正在编写的代码将成为一个npm包。让我知道,如果你认为有什么npm的具体我应该知道有关这个问题。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Paleo    7 年前

    你可以做:

    import * as clientTypes from 'client-types';
    

    然后使用 clientTypes.CreateProjectRequestBody 而不是 CreateProjectRequestBody

    但是一个好的IDE应该在您编写类型时自动导入它们。

    ES6 In Depth: Modules .

    推荐文章