为什么我无法访问打字稿类的构造函数中的抽象属性

2024-05-18

abstract class Route {
    abstract readonly name?: string;
    protected abstract pattern: string;

    public constructor() {
        // Do something with `this.name` and `this.pattern`.
        
        console.log(this.pattern); // Typecheck error
    }
    
    abstract handle(): void;
}

这会引发错误,因为this.pattern不能在构造函数中访问。为什么我无法访问它?


(将我的评论转换为答案)

为什么我无法访问它?

因为派生类的构造函数不会被调用,所以该对象可能处于无效状态。某些语言允许来自父构造函数的虚拟调用但人们仍然普遍认为这是一种不好的做法 https://stackoverflow.com/q/962132/159145。 TypeScript 选择禁止它。

文档中提到了这一点:https://www.typescriptlang.org/docs/handbook/classes.html https://www.typescriptlang.org/docs/handbook/classes.html

[...]每个包含构造函数的派生类必须调用super()它将执行基类的构造函数。更重要的是,在构造函数主体中访问 this 的属性之前,我们必须调用super()。这是 TypeScript 将强制执行的一条重要规则。

万一的解决方案是通过pattern作为参数Route的构造函数。如果pattern在调用父类构造函数之前无法由子类的构造函数确定,那么您需要重新考虑您的设计。

abstract class Route {
    
    constructor(
        private readonly pattern: string
    )
    {
        console.log( pattern );
    }
}

class Derived123 extends Route {
    
    constructor() {
        super( /*pattern:*/ "123" )
    }
}

class Derived456 extends Route {
    
    constructor() {
        super( /*pattern:*/ "456" )
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我无法访问打字稿类的构造函数中的抽象属性 的相关文章

  • 不要使用对象作为类型

    我收到 lint 错误 不要使用对象作为类型 当我使用对象作为类型时 示例如下 export const myFunc obj object string gt return obj toString 知道我应该为具有未知属性的对象赋予什么
  • 如何获取Python对象父级?

    所以 我试图获取自定义对象 内部 的对象 这是一个例子 假设 o 是一个对象 无论是什么类型 它都可以存储变量 o Object class Test def init self self parent o This is where I
  • Nightmare.js 截图缓冲区长度 0

    我正在运行一个 night js 脚本 我试图在其中截取页面上多个元素的屏幕截图 The first元素被捕获得很好 但折叠下方的所有其他元素都以零长度捕获 我正在努力调试这个问题 任何帮助将非常感激 基本上这个脚本会遍历一个页面并选择al
  • Java 的 React Typescript API 类型 byte[] image/png

    我正在将其转换为我们的 React Web 应用程序的 Typescript 服务 下面是 Java 中的原始 API Typescript 响应数据类型是什么 斑点 GET Path vendorId Photo Produces ima
  • Sign in With Google (GSI) 库的 TypeScript 类型声明在哪里?

    我正在使用以下方式实现 使用 Google 登录 Google GSI 库 https developers google com identity gsi web guides overview 我的应用程序使用 Next js 和 Ty
  • 使用函数重载进行解构

    我正在尝试创建一个函数 该函数需要一对坐标或一个对象x and y属性并返回邻居列表 但由于某种原因 即使我检查了它的类型 我也无法解构该对象 interface Coords x number y number public getNei
  • 将类对象放置在向量中?

    我注意到我可以将一个类放置在一个向量中 这是我的程序 我收到以下错误 out blackjack exe blackjack obj blackjack obj error LNK2019 unresolved external symbo
  • 如何在 Eclipse 中获得完全限定的类名?

    有没有一种快速方法可以在 Eclipse 中单击 Java 类并获取其完全限定名称 或将其复制到剪贴板 2016年6月29日编辑 正如 Jeff 所指出的 您只需要执行以下第二步 1 Double click on the class na
  • VBA全局类变量

    我的障碍是试图让多个子程序识别类变量 当我尝试全局声明它们时 出现编译错误 无效的外部过程 然后 当我运行公共函数或子函数来声明变量时 它们在其他子函数中保持未定义状态 我希望多个子程序能够识别变量 因为它们的值应该通过用户窗体进行更改 然
  • C++ 自注册类有多安全?

    来自 哪里这个线程 https stackoverflow com questions 77817 c runtime knowledge of classes我用 C 实现了一个与所选解决方案类似的系统 我现在的问题是 用户 Daniel
  • 如何在 comments/JSDoc 中引用另一种打字稿类型?

    我熟悉 Javadoc 在 Javadoc 中 您可以放置 一个引用放置在另一种类型上的 Javadoc 的链接 https stackoverflow com questions 5915992 how to reference a me
  • 混合联合类型、泛型和条件类型会导致意外的“类型不可分配给类型”错误

    我遇到了类型推断的问题 特别是当条件类型在联合类型中使用时 可能有一种更短的方法来证明这个问题 但我找不到一个 在此查看实际问题游乐场链接 https www typescriptlang org play ts 3 9 7 code PT
  • C++ 类成员指向全局函数的指针

    我想要一个类 它的成员是一个指向函数的指针 这是函数指针 typedef double Function double 这是一个符合函数指针定义的函数 double f1 double x return 0 这是类定义 class Inte
  • 如何对 NestJS 中的控制器应用防护进行单元测试?

    我在 NestJS 中配置了一个控制器 我想检查是否设置了适当的防护 有人有如何完成此操作的示例吗 这个 删节的 示例作为一个应用程序可以正常工作 所以我只是在测试指导之后 您会注意到在用户测试中有一些我正在调用的测试Reflect get
  • 使用 SystemJS 和 TypeScript 的 Angular 应用程序中的“意外令牌导出”

    问题 神秘的 意外的代币导出 我碰巧在 plunker 中运行的 Angular 示例中遇到此错误 其中 SystemJS 在浏览器中转换 TypeScript 代码 代码没有任何问题本地运行良好 Solution 这不是角度问题 在浏览器
  • Typescript / 类型安全柯里化函数

    如何在打字稿中安全地输入柯里化函数 特别注意以下示例 interface Prop
  • 使用模块编译 TypeScript 并捆绑到一个文件

    当使用module inside tsconfig jsonTypeScript 编译器将忽略任何 out标记并生成常规输出 例如commonjs模块在单独的文件中 有没有办法将所有转译文件捆绑到一个文件中 我目前正在尝试使用 webpac
  • 当放入对象方法内时,引用拉入封装方法的方法会移出范围

    当我将引用拉入包的方法放入另一个方法中时 它会离开范围并失败 执行此操作的正确方法是什么 我尝试玩弄 自我 但我是新人 但没有成功 所需的解决方案 不起作用 返回错误 nil NilClass 的未定义方法 accounts NoMetho
  • 使用 createReducer 函数时构建用于生产的 Angular+ngrx 8 时出错

    目前我正在尝试使用新的 NgRX 构建 Angular NgRX 8 应用程序creator功能 但是当我构建这个用于生产时 出现以下错误 装饰器中不支持函数调用 但在 reducers 中调用了 createReducer 在开发模式下完
  • Material.Angular.io mat-autocomplete [displayWith] 函数更新范围变量

    我遇到了一个问题 我可以在实例化 mat autocomplete 的组件控制器中访问本地声明的变量 我面临的问题是局部变量被困在这个范围内 我无法更新它们 有关更新 mat autocomplete 范围变量的任何想法或想法 最终我要做的

随机推荐