如何强制TypeScript转换原型方法?

时间:2018-03-01 15:59:58

标签: json node.js typescript

我试图在TypeScript中定义类的方法然后填充该类,但是当我尝试调用这些方法时,它说它们不存在。

打字稿:

export class ColumnHeader extends JSONObject {
    // ...     
    isCountrySubtype(): boolean {
        return (this.columnSubtype && this.columnSubtype.toLowerCase() == ColumnSubtype.Country.toLowerCase()) ? true : (this.type != null && this.type.class != null && this.type.class == (new CountryType()).class);
    }

    isRegionSubtype(): boolean {
        return (this.columnSubtype && this.columnSubtype.toLowerCase() == ColumnSubtype.Region.toLowerCase()) ? true : (this.type != null && this.type.class != null && this.type.class == (new RegionType()).class);
    }

    isDmaSubtype(): boolean {
        return (this.columnSubtype && this.columnSubtype.toLowerCase() == ColumnSubtype.Dma.toLowerCase()) ? true : (this.type != null && this.type.class != null && this.type.class == (new DmaType()).class);
    }

    isCitySubtype(): boolean {
        return (this.columnSubtype && this.columnSubtype.toLowerCase() == ColumnSubtype.City.toLowerCase()) ? true : (this.type != null && this.type.class != null && this.type.class == (new CityType()).class);
    }

    isPostalCodeSubtpe(): boolean {
        return (this.columnSubtype && this.columnSubtype.toLowerCase() == ColumnSubtype.PostalCode.toLowerCase()) ? true : (this.type != null && this.type.class != null && this.type.class == (new PostalCodeType()).class);
    }
    // ...
}

透明的JavaScript:

class ColumnHeader extends JSONObject {
    constructor() {

    }
    isCountrySubtype() {
        return (this.columnSubtype && this.columnSubtype.toLowerCase() == enums_1.ColumnSubtype.Country.toLowerCase()) ? true : (this.type != null && this.type.class != null && this.type.class == (new CountryType()).class);
    }
    isRegionSubtype() {
        return (this.columnSubtype && this.columnSubtype.toLowerCase() == enums_1.ColumnSubtype.Region.toLowerCase()) ? true : (this.type != null && this.type.class != null && this.type.class == (new RegionType()).class);
    }
    isDmaSubtype() {
        return (this.columnSubtype && this.columnSubtype.toLowerCase() == enums_1.ColumnSubtype.Dma.toLowerCase()) ? true : (this.type != null && this.type.class != null && this.type.class == (new DmaType()).class);
    }
    isCitySubtype() {
        return (this.columnSubtype && this.columnSubtype.toLowerCase() == enums_1.ColumnSubtype.City.toLowerCase()) ? true : (this.type != null && this.type.class != null && this.type.class == (new CityType()).class);
    }
    isPostalCodeSubtpe() {
        return (this.columnSubtype && this.columnSubtype.toLowerCase() == enums_1.ColumnSubtype.PostalCode.toLowerCase()) ? true : (this.type != null && this.type.class != null && this.type.class == (new PostalCodeType()).class);
    }
}

我可能需要原型语法,以便与尚无法使用ES2015的部件实现跨系统兼容。

1 个答案:

答案 0 :(得分:3)

您将prototype设置为ES2015(或更高版本)。这就是Javascript包含类的原因。 ES2015支持类,因此无需使用es5。您可以定位tsconfig.json并使用旧方法在Javascript中执行类。您可以在tsc或Visual Studio或tsconfig.json命令行中设置此项(具体取决于您的打字稿设置方式)。对于{ "compilerOptions": { "target": "es6" } }

columnHeader

但是您的错误似乎与此无关,可能在运行时{{1}}不是预期的类型。