相关疑难解决方法(0)

如何在TypeScript中的`window`上显式设置新属性?

我通过显式设置属性来为我的对象设置全局命名空间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绝对可以包含任何东西.

typescript

502
推荐指数
25
解决办法
27万
查看次数

在node.js中扩展TypeScript Global对象

我有一个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界面的一种方式,但它似乎没有任何影响.

global node.js typescript

46
推荐指数
7
解决办法
3万
查看次数

如何使用 Vite 将 package.json 中的当前应用版本显示给用户?

通过 create-react-app 可以实现process.env.REACT_APP_VERSION这一点。

Vite中有类似的吗?

npm package.json vite

46
推荐指数
5
解决办法
3万
查看次数

如何在Angular 2中扩展具有依赖注入的组件?

我有以下课程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如此.

dependency-injection angular

35
推荐指数
3
解决办法
5万
查看次数

我如何在打字稿中使用本机获取和节点(节点v17.6)

在控制台中,运行命令时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

也可以看看:

node.js fetch-api

18
推荐指数
2
解决办法
1万
查看次数

当tsc成功编译项目时,ts-node忽略d.ts文件

成功编译了我的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)

typescript typescript-typings ts-node

16
推荐指数
5
解决办法
4553
查看次数

命名空间“NodeJS”没有导出成员“Global”

我曾经使用以下代码定义全局变量:

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 及以上版本中声明全局变量?

node.js typescript

8
推荐指数
1
解决办法
5304
查看次数

在打字稿中使用 globalThis

我正在尝试在 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 =表达式

typescript

6
推荐指数
4
解决办法
9907
查看次数

ts-node 找不到我的类型定义文件

当我运行时,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按照它的建议,我修改了我的 …

node.js typescript ts-node

6
推荐指数
1
解决办法
784
查看次数

访问 globalThis 属性时出现打字稿错误

我正在尝试访问该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 。有人知道如何支持这个吗?

javascript typescript

6
推荐指数
1
解决办法
7298
查看次数

将数据从“index.html”传递给反应组件

我最近开始进行网络开发。我陷入了困境,这可能是一个微不足道的问题。我试图弄清楚如何将数据从动态创建的数据传递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)

typescript reactjs create-react-app

5
推荐指数
1
解决办法
3853
查看次数

扩展 Typescript 中的内置类型

我有以下结构:

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'. …

javascript typescript webdriver-io ts-node typescript3.0

4
推荐指数
1
解决办法
5258
查看次数

如何在打字稿中声明一个全局变量

我在typescript中声明了一个全局变量,例如:global.test ="something"我尝试这样做,我得到错误属性'test'在'Global'类型上不存在.

typescript

3
推荐指数
2
解决办法
1万
查看次数