在函数中初始化的Typescript继承属性被覆盖

库图默

有点背景,我正在将我的源代码从Create React App迁移到Next.JS和TypeScript的编译方式有所不同。

看这个例子:

abstract class Parent {
  constructor(val: any) {
    this.init(val);
  }

  abstract init(val: any);
}

class Child extends Parent {
  foo: string;

  constructor(val: string) {
    super(val);
  }

  init(val: any) {
    this.foo = val;
  }
}

const i = new Child('test');
console.log(i.foo);

我希望console.log打印,test但是可以打印undefined(在TypeScript Playground中尝试过并可以正常工作)。

问题是我不确定哪个配置会导致这种奇怪的行为,我的第一个怀疑者tsconfig --> strictPropertyInitialization试图将其设置为,false但没有任何更改。

这是我的tsconfig.json

{
  "compilerOptions": {
    "target": "esnext",
    "module": "esnext",
    "jsx": "preserve",
    "lib": [
      "es5",
      "es6",
      "dom",
      "es2015",
      "es2017"
    ],
    "moduleResolution": "node",
    "allowJs": true,
    "noEmit": true,
    "allowSyntheticDefaultImports": true,
    "skipLibCheck": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "removeComments": false,
    "preserveConstEnums": true,
    "sourceMap": true,
    "forceConsistentCasingInFileNames": true,
    "noImplicitReturns": true,
    "noImplicitThis": true,
    "noImplicitAny": true,
    "strictNullChecks": true,
    "experimentalDecorators": true,
    "strictPropertyInitialization": false
  }
}

任何帮助将不胜感激,

墨粉

芬顿

因为您的目标是ESNext,所以JavaScript输出将类似于以下示例,该示例在现代浏览器中将输出“ test”。

class Parent {
    constructor(val) {
        this.init(val);
    }
}
class Child extends Parent {
    constructor(val) {
        super(val);
    }
    init(val) {
        this.foo = val;
    }
}
const i = new Child('test');
console.log(i.foo);

如果您尝试在不支持ECMAScript类语法的较早版本的运行时中运行它,则将无法正常运行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在构造函数中初始化的JavaScript原型属性不会用分配的新原型覆盖

来自分类Dev

初始化函数在python中的多重继承中执行

来自分类Dev

如何在继承的模型中初始化类属性

来自分类Dev

属性的继承和初始化

来自分类Dev

在类本身中初始化 TypeScript 变量与在构造函数中初始化的区别

来自分类Dev

Kotlin:在构造函数中初始化类属性

来自分类Dev

在构造函数中初始化EF POCO标量属性

来自分类Dev

Typescript类属性的初始化顺序

来自分类Dev

Typescript类属性未初始化

来自分类Dev

使用另一个构造函数的初始化来初始化构造函数中的属性

来自分类Dev

从NSObject继承时,在私有函数中初始化变量

来自分类Dev

如何在派生构造函数中初始化从基类继承的向量

来自分类Dev

构造函数继承和直接成员初始化

来自分类Dev

继承的构造函数忽略类内初始化

来自分类Dev

继承初始化的字段

来自分类Java

Java继承与初始化

来自分类Dev

初始化方法继承

来自分类Dev

声明并初始化Typescript中的Dictionary

来自分类Dev

在TypeScript中初始化地图

来自分类Dev

初始化集合中的属性

来自分类Dev

Swift中的惰性属性初始化

来自分类Dev

在 Swift 中初始化类属性

来自分类Dev

Kotlin 中的原始属性初始化

来自分类Dev

C#中的属性初始化

来自分类Dev

MATLAB中的属性初始化

来自分类Dev

如何从构造函数初始化列表中的常量构造函数访问属性?

来自分类Dev

结构初始化中的调用函数

来自分类Java

在构造函数中初始化日历

来自分类Dev

函数中的变量初始化