2017-07-27 70 views
1

類我目前正在寫的基於JavaScript spotify-web-api-node模塊分型,因此它可以在一個打字稿項目中使用,併發揮好與編譯器。正確的方法來定義外部節點模塊

以下目前通過tsc類型檢查,但TSlint抱怨Interfaces cannot be constructed. Did you mean declare class?。將SpotifyInstanceinterface切換到class但是由於tsc TS2351 Cannot use 'new' with an expression whose type lacks a call or construct signature.而導致無法編譯。

什麼是定義這個類並將其導出,以便在其他位置導入模塊時使用的正確方法是什麼?

spotify.d.ts

declare module "spotify-web-api-node" { 
    let instance: Spotify.SpotifyInstance; 
    export = instance; 
} 

declare namespace Spotify { 
    export interface Authorization { 
    body: { 
     access_token: string; 
     refresh_token: string; 
    }; 
    } 

    export interface CurrentSong { 
    body: { 
     item: { 
     id: string; 
     name: string; 
     artists: [{ 
      name: string; 
     }] 
     album: { 
      name: string; 
      images: [{ 
      url: string 
      }] 
     } 
     } 
    }; 
    } 

    export interface Config { 
    clientId: string; 
    clientSecret: string; 
    redirectUri: string; 
    } 

    export interface SpotifyInstance { 
    new(config: Config): SpotifyInstance; 
    createAuthorizeURL(permissions: string[], state: string): string; 
    authorizationCodeGrant(state: string): Promise<Authorization>; 
    getMyCurrentlyPlaying(): Promise<CurrentSong>; 
    setAccessToken(token: string): void; 
    setRefreshToken(token: string): void; 
    } 
} 

index.ts

import * as Spotify from "spotify-web-api-node"; 

const spotify = new Spotify({ 
    clientId: "", 
    clientSecret: "", 
    redirectUri: "" 
}); 

回答

-1

我沒有看到你的代碼中的類。由Typescript編譯後,接口不會在js中生成任何代碼。如果你使用一個類,那麼你應該爲它創建一個構造函數。

export class YourClassName{ 

     constructor() { 
      // Constructor Code 
     } 
    } 

然後,你可以這樣做:

var myClass = new YourClassName(); 

我希望這可以幫助你

+0

'SpotifyInstance'在我的第一個代碼分型的鈕是我目前使用定義什麼該類是外部模塊(spotify-web-api-node)。這是不正確的,因爲接口不能用於定義類,但是我想知道的是爲了在我的類型文件中從外部模塊定義類的正確語法。 – Dustin

+0

啊你原來的代碼是在java-script中,並且你正在構建.d文件。 – freedeveloper

+0

是的,你知道了!我一定要添加一個鏈接到外部模塊,我試圖寫類型,以便我可以在使用Typescript編譯器的同時使用模塊。 – Dustin