使用TypeScript

时间:2017-07-13 15:06:40

标签: typescript indexof type-hinting

如何让indexOf与TypeScript数字基本类型一起玩得很好,现在它总是返回-1,即使它确实存在?

SelectElement 课程中,我有一个属性"额外"包含一个名为&#34的键的对象;当"这是 SelectElementInterface 中定义的数字数组。

现在在 SelectElement 类中,我的属性值也是类型编号。

但是当在 SelectElement 类的 displayExtra 方法中运行代码时,我遇到了有关indexOf的问题。控制台日志的输出如下所示

[16:28:20]  console.log: [1,2]
[16:28:20]  console.log: 1
[16:28:20]  console.log: -1

从控制台日志中可以看出,该值确实存在,并且根据我的界面它们应该是相同的类型。这是TypeScript中的错误还是我在这里遗漏了一些东西?如何让indexOf与TypeScript中的基本数字类型一起使用?

SelectElement类

export class SelectElement extends Element<number> {
    public options: object;
    public extra: SelectElementInterface;

    constructor(options: ElementInterface, selectOptions: object, extra: SelectElementInterface) {
        super(options);
        this.options = selectOptions;
        this.extra = extra;
    }

    public displayExtra(): boolean {
        console.log(JSON.stringify(this.extra.when));
        console.log(this.value);
        console.log(this.extra.when.indexOf(this.value));

        return this.extra.when.indexOf(this.value) > -1;
    }
}

元素超类

export abstract class Element<type> {

    public id: number;
    public type: string;
    public label: string;
    public required: boolean;
    public value: type;

    constructor(options: ElementInterface) {
        this.id = options.id;
        this.type = options.type;
        this.label = options.label;
        this.required = options.required;
    }

    abstract displayExtra(): boolean;
}

ElementInterface

export interface ElementInterface {
    id: number,
    type: string,
    label: string,
    required: boolean,
    value: string
}

SelectElementInterface

export interface SelectElementInterface  {
    input: string,
    label: string,
    required: boolean,
    when: Array<number>,
    value: string
}

修改:删除了示例中不必要的拼写错误和代码。

1 个答案:

答案 0 :(得分:1)

你称之为超级(选项),但我没有看到在构造函数中的任何位置设置值:

constructor(options: ElementInterface) {
  this.id = options.id;
  this.type = options.type;
  this.label = options.label;
  this.required = options.required;
  // Should this be set here?
  // this.value == options.value
}