问题说明
在看VSCode源码时发现存在,A类
里会创建B类
,B类
的方法需要用A类
的实例作参数,
ts在声明参数或变量需要定义类型,
于是就构成了需要互相引用的问题。
不过VSCode通过打包解决这个问题,导入时使用绝对路径。
但是会产生一个新的问题,编辑器无法进行追踪,也就没有代码提示了
那么是否存在什么方法既能解决互相引用,又能解决编辑器提示的问题呢?
例子
这个例子不是很恰当,可以通过其他的结构来实现同样的功能避免这种问题,但这里主要是为了说明我想怎么引用。
/* parent.ts */
import { Child } from './child'
export class Parent {
firstName: string
lastName: string
child: Child
constructor(firstName: string, lastName: string, childfirstName: string) {
this.firstName = firstName
this.lastName = lastName
this.child = new Child(childfirstName)
}
getChildName() {
return this.child(this)
}
}
/* child.ts */
import { Parent } from './parent'
export class Child {
firstName: string
constructor(firstName: string) {
this.firstName = firstName
}
getName(parent: Parent) { // 这里引用Parent做类型检查
return this.firstName + ' ' + parent.lastName
}
}
/* test.ts */
import { Parent } from './parent'
const parent = new Parent('Jonathan', 'Joestar', 'George')
console.log(parent.getChildName()) // George Joestar
大致理解, 建议在子类中的constructor中引用父类实例, 余下操作在实例上进行,应该可以解决问题