2017-06-13 62 views
0

我只想寫一個用戶模塊,它有多個類,即UserDetail,UserResestPassword等。接口繼承類型腳本

這些類將共享一些共同屬性,我可以在每個類上聲明屬性並初始化它。

第二種方法是我會用繼承的,這將需要在 接口

export interface Iuser { 
    UserID:string; 
    UserName:string 
} 

申報並落實到班級

import {Iuser} from './IuserDetail' 

class UserInfo implements Iuser {} 

我的問題是,豈不等於支持在打字稿?如果不是什麼解決這個問題的方法

+0

什麼不支持?如果你想繼承使用類和'extends'關鍵字。 – Saravana

+0

@Saravana我得到以下錯誤 沒有導出成員'UserInfo'。並遵循我的擴展類 export class UserInfo extends Iuser {} – user3886602

+0

請使用完整示例更新您的問題。 – Saravana

回答

1

在TypeScript中有一個名爲「type erasure」的特性,在編譯過程中所有的類型信息都被刪除,所以JavaScript輸出不包含類型註釋,接口或者環境聲明 - 只有真正的代碼。

這意味着,當您要求模塊加載器(運行時)爲您提供Iuser接口時,它不存在於JavaScript文件中。

我的建議很可能是將您的接口放在文件中,並將其主要實現。這意味着你不會試圖加載只是一個空白文件的模塊。

例如:

​​

而在其他文件中,您可以:

import * as User from './UserInfo' 

export class Example implements User.Iuser { 
} 
0

看這個example

接口實際上並不編譯後的確存在,但嚴格用於類型檢查。

// i-user.ts 

export interface IUser { 
    UserID:string; 
    UserName:string 
} 

就像在其他語言的接口,你必須實現一個接口的所有成員。 TypeScript將檢查你是否缺少任何。

// user-info.ts 

import { IUser } from './i-user' 

export class UserInfo implements IUser { 
    UserID:string; 
    UserName:string; 
    OtherInfo:string; 
} 

使用extend所有父方法將可用,你不需要再執行。

// specific-user-info.ts 

import { UserInfo } from './user-info' 

class SpecificUserInfo extends UserInfo { 
    logInfo() { 
     console.log(this.UserID, this.UserName); 
    } 
}