我不确定我是否要鼓励这一点,但要从字面上回答 OP 的问题:
您可以将任何您想要的内容放入全局范围,然后在其他地方引用它。
例如,您可以在 index.html 等效项上添加以下内容:
function logit(x, loc) {
if (console && console.log) {
console.log(loc, JSON.stringify(x, null, ' '));
}
}
现在,您可以通过至少两种方式之一在任何您想要的地方使用它。
混合您的全球范围。
(window as any).logit(item, "some location")
呜呜呜。
使用声明
您也可以使用declare
.
所以在一个常规的 TypeScript 文件中:
declare const logit: (x: any, loc: string) => void;
// you could also just use
// declare const logit: any;
export default class MyClass {
public handleIt(x: string) {
logit(x, "MyClass.handleIt");
// ... logic
}
}
请注意,任何文件,不仅仅是“index.html”,都是公平的游戏,可以作为将内容推送到全局范围的启动点。请记住,如果您延迟加载模块,您可能会遇到麻烦。
你的例子
所以对你来说,你可以根据需要在全局范围内设置这两个值(或者可能是一个非 TypeScript 库为你做这件事,这几乎可以使它成为一个有效的用例),然后执行类似...
declare let CANVAS_WIDTH: number; // maybe const, I don't know your use case.
declare let CANVAS_HEIGHT: number;
export class Bullet {
x: number = 22;
y: number = 22;
constructor (speed: number) {
this.xVelocity = speed;
}
inBounds() {
return this.x >= 0 && this.x <= CANVAS_WIDTH &&
this.y >= 0 && this.y <= CANVAS_HEIGHT;
};
}
但是,同样,这是高度反模式的,并且可能表明代码有异味。正如 Rajagopal 웃 所建议的那样,您希望在另一个类上具有静态值。