在Typescript中使用globalThis
我正在尝试在Typescript中使用globalThis,我想了解一些关于如何更好地编写它的建议。在Typescript中使用globalThis,typescript,Typescript,我正在尝试在Typescript中使用globalThis,我想了解一些关于如何更好地编写它的建议。 当前的实现如下所示: 创建一个文件types/global.d.ts并添加到内部 interface Global { foo: string } declare let foo: Global["foo"]; 在tsconfig.json中添加 "files": [ "types/global.d.ts" ] 然后,为了设置foo的值,使用 (globalThis as any
当前的实现如下所示: 创建一个文件types/global.d.ts并添加到内部
interface Global {
foo: string
}
declare let foo: Global["foo"];
在tsconfig.json中添加
"files": [
"types/global.d.ts"
]
然后,为了设置foo
的值,使用
(globalThis as any).foo = "The value of foo"
我不喜欢这种方法,首先是需要的样板文件(但我认为这是不可避免的),其次是(globalThis as any).foo=
表达式可以在typescript中使用
在您的global.d.ts
文件中:
导出声明全局{
界面窗口{
//添加自定义属性和方法
foo:string
}
}
现在,您可以使用Window.foo
,而无需键入脚本警告
我在上写了一篇关于这一点的微博,最后我提出了以下解决方案 在global.d.ts中
interface Window {
foo: string
}
declare let foo: Window["foo"];
并在另一个文件中使用,如
window.foo=“foo的值”
TypeScript 3.4引入了对类型检查的支持,ECMAScript的新
globalThis
var x=1
常数y=2
设z=3
globalThis.x//ok
globalThis.y//应为错误,没有属性“y”
globalThis.z//应为错误,没有属性“z”
globalThis['x']//好的
globalThis['y']//应为错误,没有属性“y”
globalThis['z']//应为错误,没有属性“z”
globalThis.Float64Array//ok
全球这是无限//好的
声明let test1:(typeof globalThis)['x']//确定
声明let test2:(typeof globalThis)['y']//错误
声明let test3:(typeof globalThis)['z']//错误
声明let themAll:keyof typeof globalThis
您可以在中结合其他答案准备更多关于它的信息,以下是最终对我有效的答案 在TS文件的顶部(或在全局打字文件中):
找到了一条路。也许是个不错的解决办法 在项目根目录下的“global.d.ts”文件中,编写以下内容
declare global {
var [propertyYouWantToAdd]: any; or typeof "anything you want. Perhaps import a class from a module";
//Make sure you use var instead of let or const, as it attaches to the global object.
}
以下是文档中的选项,但如果您找到替代选项
window.foo = 'value of foo'
那么一个简单的解决方案就是
打字
other_var_name是保存other_var_值或对象的var
作用
为我工作我的第一个问题是Globalt的使用,以及是否有不需要它的可用解决方案。foo可以在局部范围或缩小范围内引用,而不是使用全局对象吗?@AustinMehmet在这种特定情况下,需要使用globalThis<代码>窗口对象仍然可以为我工作。但是需要一个全局的
foo
也没有办法使用任何更高阶的包装来避免全局?谢谢你的回答。我在declare global
上得到一个错误,说TS2669:全局范围的扩展只能直接嵌套在外部模块或环境模块声明中。
编辑以在行的开头添加导出关键字我还在项目根目录下有global.d.ts
文件(与tsconfig.json目录相同)我不知道。也许我错过了什么。现在我得到了TS2668:“导出”修饰符不能应用于环境模块和模块增强,因为它们总是可见的。
您使用的是什么版本的typescript?typescript编译器的发展方向是什么:tsc--v
或npx-tsc--v
globalThis这似乎是未来,但我还没有找到一种方法来使用typescript通过类型属性扩展globalThis。对于窗口接口和窗口对象,我可以这样做,但对于全局对象,我仍在寻找解决方案。如果要为foo属性指定自定义类型,您知道如何使用相同的方法吗?由于无法将自定义类型导入到global.d.ts文件中,我仍在寻找一种解决方案来声明Window/global此接口的扩展名,该接口的属性为自定义复杂类型。我不太了解这个问题。但这可能是一个可行的解决方案吗?谢谢,这在TS 4.0.5中对我有效,而所有其他答案都没有!声明名称与内置全局标识符“globalThis”冲突
declare global {
var [propertyYouWantToAdd]: any; or typeof "anything you want. Perhaps import a class from a module";
//Make sure you use var instead of let or const, as it attaches to the global object.
}
window.foo = 'value of foo'
const foo = 'value of foo';
(global as any).foo;