javascript - 是否所有打算被其他类使用的 TypeScript 类都需要显式导出和导入?
问题描述
是否所有打算被其他类使用的类都需要显式导出和导入?
我目前有一个从 Angular 8 升级到 Angular 10 的项目,并注意到很多以前不存在的错误可能与糟糕的设计或错误的编译器有关(我认为这是糟糕的设计我是 TypeScript 的新手,也许新的编译器更挑剔?)。对于我引用的每个未使用导出/导入语句的类,在将我的项目升级到 Angular 10 后,我现在得到如下所示的错误。这可以通过使每个类都具有关键字“export”来解决。 ,但这意味着我正在明确导出,目的是在需要的地方导入。然而,这些类的目的是在应用程序的全局范围内,我希望每个其他模块都可以看到这些,而不必显式导入它们,因为这些帮助类和类型无处不在。但是,在注意到这些错误之后,我想做的事情似乎不太可能。总而言之,我是否需要显式导出和导入我打算引用的所有类?
旧代码
class Person {
public first:string;
public last:string;
constructor(
first:string,
last:string,
)
{
this.first = first;
this.last = last;
}
get fullName(): string {
return this.first + ' ' + this.last;
}
}
新代码
export class Person { //I would rather not use the export keyword since Person should be used everywhere
public first:string;
public last:string;
constructor(
first:string,
last:string,
)
{
this.first = first;
this.last = last;
}
get fullName(): string {
return this.first + ' ' + this.last;
}
}
参考类:
// import { Person } from '../sharedTypes/person'; //needed if I use the export in the Person class
export class PurchaseOrder {
public name: string;
public poChargeNumber: ChargeNumber;
public siteLocation: Address;
public deliverTo: Person;
public vendor: Vendor;
public lineItems: LineItem[];
constructor(
chargeNum: ChargeNumber,
siteLocation: Address,
deliverTo: Person,
lineItems: LineItem[],
)
{
this.poChargeNumber = chargeNum;
this.siteLocation = siteLocation;
this.deliverTo = deliverTo;
if (lineItems === null || lineItems === undefined)
this.lineItems = new Array<LineItem>();
else
this.lineItems = lineItems;
}
}
错误:
src/app/purchaseorder-doc/purchaseOrder.ts:13:20 - error TS2304: Cannot find name 'ChargeNumber'.
13 chargeNum: ChargeNumber,
~~~~~~~~~~~~
src/app/purchaseorder-doc/purchaseOrder.ts:14:23 - error TS2304: Cannot find name 'Address'.
14 siteLocation: Address,
~~~~~~~
src/app/purchaseorder-doc/purchaseOrder.ts:15:20 - error TS2304: Cannot find name 'Person'.
m15 deliverTo: Person,
解决方案
是的,您绝对应该使用导入/导出机制。
在过去,JavaScript 开发人员会编写将变量/类放入全局范围的代码,例如:
window.SomeClass = SomeClass
还有臭名昭著的隐式全局,被严格模式捕获:
// Globally available in the window!
myVar = 'my-Value'
现在有了像 Angular 这样的框架,我肯定会认为这是一种不好的做法,只有在没有其他解决方案可用的特殊情况下才会使用它。
推荐阅读
- mysql - 如何使用 node.js 将对象插入 mysql 表
- swift - 如何将对象的新实例添加到对象数组中 XCode
- c# - 统一镜子;生成不同的 Player Prefabs
- jquery - 在 MaterializeCSS 模态中调用 Summernote 弹出模态问题
- r - 用日期和数值填充 R 中的数据框
- python - 如何计算两条线之间的水平距离
- c# - 如何检索用户名和姓并将其映射到 ViewModel
- c# - 使用 Unity 在 Firestore 规则中请求身份验证始终为空
- node.js - 如何使用 node js 查找正在运行的应用程序/系统软件的列表?
- node.js - 为什么 Jest 不能正确推断测试覆盖线?