我通过显式设置属性来为我的对象设置全局命名空间window.
window.MyNamespace = window.MyNamespace || {};
Run Code Online (Sandbox Code Playgroud)
TypeScript强调MyNamespace并抱怨:
属性'MyNamespace'在'window'类型的值上不存在任何"
我可以通过声明MyNamespace为环境变量并删除window显式来使代码工作,但我不想这样做.
declare var MyNamespace: any;
MyNamespace = MyNamespace || {};
Run Code Online (Sandbox Code Playgroud)
我怎样才能window留在那里让TypeScript开心?
作为旁注,我发现TypeScript抱怨特别有趣,因为它告诉我这种window类型any绝对可以包含任何东西.
我有一个node.js应用程序,它将一些配置信息附加到global对象:
global.myConfig = {
a: 1,
b: 2
}
Run Code Online (Sandbox Code Playgroud)
TypeScript编译器不喜欢这个,因为该Global类型没有名为的对象myConfig:
TS2339:"全局"类型中不存在属性"myConfig".
我不想这样做:
global['myConfig'] = { ... }
Run Code Online (Sandbox Code Playgroud)
如何扩展Global类型以包含myConfig或仅告诉TypeScript闭嘴并信任我?我更喜欢第一个.
我不想改变里面的声明node.d.ts.我看到了这个SO帖子并尝试了这个:
declare module NodeJS {
interface Global {
myConfig: any
}
}
Run Code Online (Sandbox Code Playgroud)
作为扩展现有Global界面的一种方式,但它似乎没有任何影响.
通过 create-react-app 可以实现process.env.REACT_APP_VERSION这一点。
Vite中有类似的吗?
我有以下课程ModuleWithHttp:
@Injectable()
export default class {
constructor(private fetchApi: FetchApi) {}
}
Run Code Online (Sandbox Code Playgroud)
我想用它如下:
@Component({
selector: 'main',
providers: [FetchApi]
})
export default class extends ModuleWithHttp {
onInit() {
this.fetchApi.call();
}
}
Run Code Online (Sandbox Code Playgroud)
因此,通过扩展已经注入依赖项的超类,我想在其子代中访问它.
我尝试了许多不同的方法,甚至将超类作为组件:
@Component({
providers: [FetchApi]
})
export default class {
constructor(private fetchApi: FetchApi) {}
}
Run Code Online (Sandbox Code Playgroud)
但是,即使是在超级阶层,this.fetchApi也是null如此.
在控制台中,运行命令时node --experimental-fetch现在fetch已本机启用(节点版本 >=17.6)。见下文
但是,当我添加打字稿层时,我总是得到error TS2304: Cannot find name 'fetch'.
我该如何解决这个问题?
背景思想:本地使用 fetch 并摆脱node-fetch依赖@types/node-fetch关系
tsconfig.json和一般设置:https ://github.com/nexys-system/server-boilerplate/blob/master/tsconfig.json
也可以看看:
成功编译了我的TypeScript项目之后,我打算在VS Code的调试模式下运行它ts-node.问题是,ts-node找不到d.ts我创建的文件(虽然tsc它没有问题).
项目结构是:
/
conf/
dist/
src/
types/
package.json
tsconfig.json
Run Code Online (Sandbox Code Playgroud)
tsconfig.json 相关条目是:
{
"compilerOptions": {
"target": "es2017",
"module": "commonjs",
// "lib": [],
"sourceMap": true,
"outDir": "dist",
"rootDir": "src",
"moduleResolution": "node",
"baseUrl": ".",
"paths": {
"*": [
"node_modules/*",
"src/types/*"
]
},
// "rootDirs": [],
// "typeRoots": [],
// "types": [],
},
"include": [
"src/**/*"
]
}
Run Code Online (Sandbox Code Playgroud)
定义文件ts-node找不到的是src/types/global.d.ts:
import { App } from '../App';
declare global {
namespace NodeJS { …Run Code Online (Sandbox Code Playgroud) 我曾经使用以下代码定义全局变量:
interface CustomNodeJSGlobal extends NodeJS.Global {
myGlobalVariable: unknown
}
export { CustomNodeJSGlobal }
Run Code Online (Sandbox Code Playgroud)
在 Node 14 中,但是当我安装时@types/node(目前是版本 16),它会抛出一个错误Namespace 'NodeJS' has no exported member 'Global'。如何在 Node 16 及以上版本中声明全局变量?
我正在尝试在 Typescript 中使用 globalThis,我想就如何以更好的方式编写它提出一些建议。
目前的实现是这样的:
创建一个文件types/global.d.ts并在里面添加
interface Global {
foo: string
}
declare let foo: Global["foo"];
Run Code Online (Sandbox Code Playgroud)
在tsconfig.json添加
"files": [
"types/global.d.ts"
]
Run Code Online (Sandbox Code Playgroud)
然后,以设定的值foo使用
(globalThis as any).foo = "The value of foo"
Run Code Online (Sandbox Code Playgroud)
我不喜欢这种方法首先是需要样板(但我认为这是无法避免的),其次是(globalThis as any).foo =表达式
当我运行时,ts-node node_modules/jasmine/bin/jasmine 我收到这些错误:
tsc/globals.ts:7:12 - error TS2304: Cannot find name 'SugarcubeState'.
7 State: SugarcubeState;
~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)
这是该全局文件:
/* eslint-disable @typescript-eslint/no-explicit-any */
console.log("global.ts");
// eslint-disable-next-line @typescript-eslint/no-namespace
declare namespace NodeJS {
interface Global {
State: SugarcubeState;
setup: {};
}
}
declare const State: SugarcubeState = {
variables: {}
};
declare const setup: any = {
variables: {}
};
Run Code Online (Sandbox Code Playgroud)
这是我的 index.d.ts:
type SugarcubeVariables = {
};
type SugarcubeState = { variables: SugarcubeVariables };
Run Code Online (Sandbox Code Playgroud)
它们都在同一个目录中,Visual Studio 代码没有抱怨任何东西。为什么 ts-node 似乎找不到我的类型定义文件?
我用谷歌搜索并找到了这个网站:https : //github.com/TypeStrong/ts-node#help-my-types-are-missing按照它的建议,我修改了我的 …
我正在尝试访问该globalThis属性,但收到错误:
Element implicitly has an 'any' type because type 'typeof globalThis' has no index signature`.
Run Code Online (Sandbox Code Playgroud)
// both getting...
if (!globalThis.foo) {}
// and setting...
globalThis.foo = 'bar
Run Code Online (Sandbox Code Playgroud)
我在网上可以找到的关于此的唯一内容是指 using window,并提供支持它的声明,但不适用于 globalThis 。有人知道如何支持这个吗?
我最近开始进行网络开发。我陷入了困境,这可能是一个微不足道的问题。我试图弄清楚如何将数据从动态创建的数据传递index.html到我的(打字稿)反应前端(通过创建create-react-app)。
假设我们有一个 Flask Web 服务器,当请求“/”资源时,它会收集一些初始用户数据,用它实例化一个页面模板并返回该页面:
# flask webserver
from flask import Flask
from flask import render_template
app = Flask(__name__)
@app.route('/')
def index():
initial_user_data = {"foo":"bar",
"baz":"biz"}
return render_template('index.html', initial_data=initial_user_data)
if __name__ == '__main__':
app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)
为了简单起见,initial_user_data在这里存储硬编码数据。在我的实际用例中,字典中填充了从文件等读取的各种特定于用户的数据项。
接下来,我们假设index.html使用initial_data.
<!DOCTYPE html>
<html lang="en">
<head>
...
<title>React App</title>
</head>
<body>
<script>
initial_data = {{initial_data | tojson}}
console.log(initial_data)
</script>
<div id="root"></div>
...
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
当我们现在启动网络服务器并打开浏览器导航到该页面时,可以看到正在initial_data记录到浏览器的控制台输出。到目前为止,一切都很好。
现在我的问题是:如何传递initial_data给我的(打字稿)反应组件?从概念上讲,我想做这样的事情:
// App.tsx
import React from …Run Code Online (Sandbox Code Playgroud) 我有以下结构:
project
|- types
|- global.d.ts
|- string.d.ts
|- wdio.d.ts
|- src
|- Models
|- Resources
|- Components
|- Extensions
|- string.ts
|- ...
|- tsconfig.json
|- wdio.conf.js
Run Code Online (Sandbox Code Playgroud)
我尝试用函数扩展字符串的原型。到目前为止我尝试了很多方法,我在几个网站上找到了。但要么tsc给我错误,要么 PHPStorm 显示错误消息。
project
|- types
|- global.d.ts
|- string.d.ts
|- wdio.d.ts
|- src
|- Models
|- Resources
|- Components
|- Extensions
|- string.ts
|- ...
|- tsconfig.json
|- wdio.conf.js
Run Code Online (Sandbox Code Playgroud)
我将类的增强添加String到 d.ts 文件中。然后我在一个单独的文件中定义函数的主体。当我在文件中实现它时src/Extensions/string.ts,该tsc命令没有给出错误消息,但 PHPStorm 显示以下错误:
TS2339: Property 'myCustomFn' does not exist on type 'String'. …
我在typescript中声明了一个全局变量,例如:global.test ="something"我尝试这样做,我得到错误属性'test'在'Global'类型上不存在.
typescript ×10
node.js ×4
ts-node ×3
javascript ×2
angular ×1
fetch-api ×1
global ×1
npm ×1
package.json ×1
reactjs ×1
vite ×1
webdriver-io ×1