我只想编写一个具有多个类的User模块,即UserDetail,UserResestPassword等。
这些类将共享一些常见属性,我可以在每个类上声明属性并初始化它。
第二种方法是我将使用继承,这将需要声明 界面
export interface Iuser {
UserID:string;
UserName:string
}
并将其实施到类
中 import {Iuser} from './IuserDetail'
class UserInfo implements Iuser {}
我的问题是,打字稿中是否支持?如果没有解决这个问题的方法
答案 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);
}
}