2017-09-25 65 views
0

我正在通過Node進行開發。 我有一個Javascript下列對象文件使用Javascript對象的打字稿

function Person{ 
    this.name = 'Peter', 
    this.lastname = 'Cesar', 
    this.age = 23 
} 

我想這個實例化對象在我的打字稿代碼:

let peter: any = new Person(); 

但我發現了「找不到name'Person」」這是正常的因爲我需要爲之前的函數定義簽名。我怎樣才能做到這一點?

回答

0

所以首先我覺得你的香草JavaScript語法是錯誤的,應該是

function Person() { 
    this.name = 'Peter'; 
    this.lastname = 'Cesar'; 
    this.age = 23; 
} 

然後在打字稿,你可以做

declare var Person: any; 
let peter: any = new Person; 
let john: any = new Person; 

確保外部JS包含,那麼你可以有多個對象Person

+0

這就是我正在尋找的,我只是想知道,爲什麼 聲明函數Person():void; let peter:any = new Person() 不起作用。 – skizofre3e

0

用此代替人功能

export class Person { 
    name:string = 'Peter'; 
    lastname:string = 'Cesar'; 
    age:number = 23 
} 
+0

我想用它作爲外部的JS,如果我這樣做,它意味着它已經是代碼的一部分。在我看來,我需要做的是定義函數的簽名或類型 – skizofre3e

0

是的,我認爲你需要做的是「申報」的功能。

declare function Person(): void; 

您可以在官方文檔中閱讀「聲明」。

0

答案是@TomKunzemann和@ GauravSrivastava的答案的組合:您應該將declare作爲class

隨着declare你只是告訴編譯器關於類型的形狀和行爲而不實現它,所以它依賴於JavaScript中包含的環境Person函數。

class,你告訴TypeScript,這是你用new實例化的東西。

最後,您可能不希望將peter定義爲any類型,否則TypeScript將不會在之後檢查它。如果剛剛離開關閉: any,打字稿將推斷peterPerson類型的,它會執行所期望的類型的檢查,如檢測錯別字(的例如,lastName代替lastname):

declare class Person { 
    name: string; 
    lastname: string; 
    age: number; 
} 

let peter = new Person(); // okay 
console.log(peter.name); // okay 

// note the typo below 
console.log(peter.lastName); // error! 
// "Property 'lastName' does not exist on type 'Person'. Did you mean 'lastname'"? 

希望幫助;祝你好運!