在变量中使用类的构造函数属性是一种不好的做法吗?我try 了这一点,但惊讶的是const name = new Name(time, course);个成功了,虽然我想这是有道理的,因为Eng的实例需要创建这些构造函数属性,然后它们就可以在其他地方使用了.

import { Name } from './Name'

class Eng {
   private _name = new Name(time, course);

   private constructor(time: String, course: String) {} 

   method1(){
      let results = name.convertTrials();

      return results;
   }
}

推荐答案

您的代码示例实际上存在类型错误:

class Eng {
   private _name = new Name(time, course);
   // Cannot find name 'time'.(2304)
   // Cannot find name 'course'.(2304)

   private constructor(time: string, course: string) {} 
}

就typescript而言,timecourse不在范围内.若要使用构造函数参数,它们必须位于构造函数主体中.


可能让您困惑的是,在编译时,代码运行良好.这是因为非静态类属性为您移动到构造函数中,因为在普通JS中,它们需要在构造函数中.

因此,编译后的类如下所示:

// js
class Eng {
    constructor(time, course) {
        this._name = new Name(time, course);
    }
}

这应该不会有问题.

但这对Typescript来说是个问题,它认为构造函数参数不在构造函数之外的范围内.


如果不需要参数:

class Foo {
    constructor() {}
}

class UseFoo {
   private foo = new Foo()
   private constructor() {} 
}

那么你的方法就没有什么问题了.

See Playground

Javascript相关问答推荐

在贝塞尔曲线的直线上找不到交叉点:(使用@Pomax的bezier.js)

有条件的悲剧

警告!合同执行期间遇到错误[执行已恢复](Base Layer 2)

Bootstrap动态选项卡在切换选项卡后保持活动状态,导致元素堆叠

基于变量切换隐藏文本

JQuery. show()工作,但. hide()不工作

配置WebAssembly/Emscripten本地生成问题

显示图—如何在图例项上添加删除线效果?

如何避免页面第一次加载时由于CSS样式通过JavaScript更改而出现闪烁

如何迭代叔父元素的子HTML元素

在Matter.js中添加从点A到另一个约束的约束

从逗号和破折号分隔的给定字符串中查找所有有效的星期几

处理TypeScrip Vue组件未初始化的react 对象

react -原生向量-图标笔划宽度

将Auth0用户对象存储在nextjs类型脚本的Reaction上下文中

更改agGRID/Reaction中的单元格格式

顶点图使用组标签更新列之间的条宽

由于http.get,*ngIf的延迟很大

是否在图表中计算线上的点坐标?

将数据添加到数据库时不输出