2017-02-17 110 views
0

我從1年來一直使用打字稿,每當我需要一個對象傳遞時,我需要以醜陋的方式或手動執行它。什麼是從打字稿中的接口創建對象的最佳方式

在typescript中有類型定義的接口並保存我們需要的所有參數。有沒有一種方法可以創建對象?

例如:

export interface User { 
    name: string; 
    email: string; 
} 

我想下面的代碼實現自動化,我不能從界面做評估者我已創建具有構造函數的類。

user { 
name: ''/null/undefined, 
email: ''/null/undefined 
} 

let user: User = new User() // this will show error 

但我可以創建一個新的對象超出下課。

export class User { 
    constructor() { 
    name: string; 
    email: string; 
    } 
} 

new User(); 

哪一個是麪糊?創建一個構造類或接口?

+0

你是什麼意思「我想要代碼自動化」?你是否想直接爲接口賦值而不創建實現類? – rageit

+0

是的。那可能嗎? –

+0

您也可以使用對象字面量語法來創建它:'let user:User = {name:'',email:''};'。很明顯,你是唯一能決定哪個更好的人,因爲你是那種抱怨正常工作的人。 –

回答

1

我不認爲有辦法。

接口和類是兩個不同的東西,有不同的使用情況。接口只是結構,不能有實例,你會看到編譯的生成JavaScript的腳本,你不會在任何地方找到接口。

所以接口只在編譯時而不是運行時。

但類是運行時。所以當你說新的User()時,它會創建該類的實例,就像它在生成的JavaScript中那樣。

如果它適合您的情況,您還可以探索抽象類。

1

是的,如果您不需要指定/實例化接口中定義的所有屬性,則可以直接爲接口分配值,並按照其外觀分配值,然後使用?將其標記爲可選。在以下示例電子郵件中,標記爲可選,並且用戶的後續分配將是有效的語句。

interface User { 
    name: string; 
    email?: string; 
} 

let user: User = { name: '' }; 
+0

我的問題是不同的!我試圖創建對象的接口不是可選參數 –

0

你可以這樣做:

export interface IMyInterface { 
    property1: string; 
    property2: number; 
    property3: boolean; 
} 

export class MyClass { 
    property1: string = ''; 
    property2: number = 1; 
    property3: boolean = false; 
    constructor(){} 
} 

然後實例:

let newFromInterface = new MyClass(); 

我通常在共享服務出口的接口和類,然後在我的組件進口他們和實例化它們。

相關問題