接口继承Type脚本

时间:2017-06-13 06:20:29

标签: oop typescript inheritance

我只想编写一个具有多个类的User模块,即UserDetail,UserResestPassword等。

这些类将共享一些常见属性,我可以在每个类上声明属性并初始化它。

第二种方法是我将使用继承,这将需要声明 界面

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

并将其实施到类

 import {Iuser} from './IuserDetail'

 class UserInfo  implements Iuser {}

我的问题是,打字稿中是否支持?如果没有解决这个问题的方法

2 个答案:

答案 0 :(得分:1)

在TypeScript中有一个名为" type erasure"的功能。其中所有类型信息在编译期间被删除,因此JavaScript输出不包含类型注释,接口或环境声明 - 仅实际代码。

这意味着当您要求模块加载器(在运行时)获取Iuser接口时,它不会存在于JavaScript文件中。

我的建议可能是将您的接口放在带有主要实现的文件中。这意味着您最终不会尝试加载只是空白文件的模块。

例如:

export interface Iuser {
    UserID:string;
    USerName:string

}

export class UserInfo  implements Iuser {
}

在其他文件中,您可以:

import * as User from './UserInfo'

export class Example implements User.Iuser {
}

答案 1 :(得分: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);
    }
}