[英]Can I inherit one interface into another in typescript? How can I access the property defined in the inherited interface?
[英]How can I access a property of a property declared with an interface in Typescript?
我正在尝试此代码:
export interface IEnumElement {
elem: string;
text: string;
val: number
}
export interface IIndexable<T> {
[index: string]: T;
}
export class AdminBase {
ExamStatusId: IIndexable<IEnumElement> = {
All: {
elem: "",
text: 'Exam Status: All',
val: 0
},
Current: {
elem: "asdf",
text: 'Exam Status: Current',
val: 1
}
}
}
var x = new AdminBase();
var y = x.ExamStatusId.All;
它给我一个错误,说:
Error 1 The property 'All' does not exist on value of type
'IIndexable<IEnumElement>'. C:\Protractor\TypeScript1.ts
请注意,ExamStatusId现在只有两个属性,但是以后可能有许多不同的属性。
这里的要点是,我们声明的类型ExamStatusId
要实现此接口IIndexable<IEnumElement>
ExamStatusId: IIndexable<IEnumElement>
我们还声明了IIndexable<IEnumElement>
具有string
键和类型T
元素:
export interface IIndexable<T> {
[index: string]: T;
}
因此,这里如何访问该成员的唯一方法是通过字符串索引器:
var y = x.ExamStatusId["All"];
请查看我对上一个问题的回答...您将看到我的解决方案实际上允许访问All
属性。
再一次,我将强调TypeScript依靠类型推断的美丽。 您不需要显式注释程序中的所有内容,可以让编译器和语言服务来完成这些工作。
代码的“类型推断版本”为您提供:
ExamStatusId
属性用作ExamStatusId
,请ExamStatusId
安全性 All
属性 这是完整的示例:
interface IEnumElement {
elem: string;
text: string;
val: number
}
class Exam {
private examStatusSelectId: number;
ExamStatusId = {
All: {
id: this.examStatusSelectId,
elem: '',
text: 'Exam Status: All',
val: 0
},
Current: {
id: this.examStatusSelectId,
elem: '',
text: 'Exam Status: Current',
val: 1
}
}
}
// This function must be passed an IEnumElement
function example(element: IEnumElement) {
}
var exam = new Exam();
// The compiler knows this is good
example(exam.ExamStatusId.All);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.