是否需要显式导出和导入所有打算供其他 类 使用的 TypeScript 类?
Do all TypeScript classes that intend to be used by other classes need to be explicitly exported and imported?
是否所有打算供其他 classes 使用的 classes 都需要显式导出和导入?
我目前有一个项目,我从 Angular 8 升级到 Angular 10 并注意到很多之前不存在的错误,这些错误可能与糟糕的设计或错误的编译器有关(我认为这是糟糕的设计我是 TypeScript 的新手,也许新的编译器更挑剔?)。对于我引用的每个未使用 export/import 语句的 class,在将我的项目升级到 Angular 10 后,我现在得到如下所示的错误。这可以通过使每个单个 class 上有关键字“export”,但这意味着我明确导出是为了在需要的地方导入。然而,这些 classes 是为了在应用程序的全局范围内,我希望每个其他模块都能看到它们而不必显式导入它们,因为这些助手 classes 和类型在任何地方都被使用。但是,在注意到这些错误后,我想做的事情似乎不可能了。所以总而言之,我是否需要显式导出和导入我打算引用的所有 classes?
旧代码
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;
}
}
引用 Class:
// 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 这样的框架,我肯定会认为这是一种不好的做法,只有在没有其他解决方案可用的特殊情况下才采用它。
是否所有打算供其他 classes 使用的 classes 都需要显式导出和导入?
我目前有一个项目,我从 Angular 8 升级到 Angular 10 并注意到很多之前不存在的错误,这些错误可能与糟糕的设计或错误的编译器有关(我认为这是糟糕的设计我是 TypeScript 的新手,也许新的编译器更挑剔?)。对于我引用的每个未使用 export/import 语句的 class,在将我的项目升级到 Angular 10 后,我现在得到如下所示的错误。这可以通过使每个单个 class 上有关键字“export”,但这意味着我明确导出是为了在需要的地方导入。然而,这些 classes 是为了在应用程序的全局范围内,我希望每个其他模块都能看到它们而不必显式导入它们,因为这些助手 classes 和类型在任何地方都被使用。但是,在注意到这些错误后,我想做的事情似乎不可能了。所以总而言之,我是否需要显式导出和导入我打算引用的所有 classes?
旧代码
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;
}
}
引用 Class:
// 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 这样的框架,我肯定会认为这是一种不好的做法,只有在没有其他解决方案可用的特殊情况下才采用它。