小编Jak*_*one的帖子

类型“可分配给类型‘T’的约束,但‘T’可以使用约束‘RGT’的不同子类型进行实例化

我在 TypeScript 中遇到了这个错误消息。我查看了以下答案,但我根本不明白这些解决方案。

这是我的代码的精简版本,其中包含错误:

interface R {
    field: string;
    operator: string;
    value: any;
}
interface RG {
    combinator: 'and'|'or';
    rules: (R|RG)[];
}
interface RGIC {
    rules: (RGIC|R|string)[];
}
type RGT = RG | RGIC;

const f = <T extends RGT>(r: T): T => {
    if ('combinator' in r) {
        return { combinator: 'and', rules: [] }; // <-- TS error here
    }
    return { rules: [] }; // <-- TS error here
}
Run Code Online (Sandbox Code Playgroud)

我想表达的是,如果r是类型RG,那么函数 …

typescript

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

如何在 VS Code 中刷新 monorepo TypeScript 类型而不重新加载窗口

我有一个名为monoreporeact-querybuilder的开源项目。大多数 TypeScript 类型定义都位于中。ts

当我在 VS Code 中为从 导入类型的其他包之一打开文件时@react-querybuilder/ts,这些类型似乎是根据packages/ts/distVS Code 启动时的文件夹进行缓存的。

当我更新文件夹中的类型ts并重建@react-querybuilder/ts包时,即使我关闭并重新打开所有文件,更改也不会自动应用到其他项目。

我发现更新类型缓存的唯一方法是重新加载 VS Code 窗口。不幸的是,我的工作计算机很旧,并且不是作为出色的开发计算机而构建的,因此这可能需要一些时间。有没有办法刷新类型而不完全重新加载窗口?

typescript visual-studio-code monorepo

13
推荐指数
1
解决办法
3728
查看次数

从子文件夹的 package.json 运行yarn/npm 脚本

我维护一个包的单一存储react-querybuilder库。我将文档网站代码合并到该目录下,但不是作为工作区(这些代码位于)。/website/packages/*

/website目录有自己的package.json脚本docusaurus *(start/build/deploy/etc.)。我希望在根目录中有脚本/package.json来执行/website/package.json. 目前我有这样的东西/package.json

{
  "scripts": {
    "website:install": "cd website && yarn",
    "website:start": "cd website && yarn start",
    "website:build": "cd website && yarn build",
    "website:deploy": "cd website && yarn deploy"
  }
}
Run Code Online (Sandbox Code Playgroud)

有没有更好、更通用的方法来做到这一点?这样我必须为每个脚本命名两次,一次 in/package.json一次 in /website/package.json.

(我尝试过--cwd,但这实际上并没有运行在其他目录的 中定义的脚本。它运行其他目录的根目录package.json中定义的脚本。例如,实际上与 package.json yarn --cwd website buildyarn build,至少在我的情况下是这样。)

我认为可能有一个yarn--cwd …

npm-scripts yarnpkg

7
推荐指数
0
解决办法
1043
查看次数

如何在 redux-thunk 中使用 Redux 4.0 TypeScript 绑定

我在通过 redux-thunk 使用 Redux 4.0 的新 TS 绑定时遇到问题。我通过将基本的 Redux “待办事项列表”示例转换为 TypeScript(此处repo),并使 Add Todo 操作成为 thunk来重新创建该问题。问题与此处报告的问题相同:“ThunkAction”类型的参数不可分配给“AnyAction”类型的参数。类型 'ThunkAction' 中缺少属性 'type'

基本上,我可以让它工作,但我any在几个我认为不应该使用的地方使用它。一个地方是index.tsx#L14,我将 thunk 中间件添加到存储中:

const store = createStore(
  rootReducer,
  applyMiddleware(thunk as ThunkMiddleware<IRootState, any>)
);
Run Code Online (Sandbox Code Playgroud)

如果我使用除此之外的任何其他内容any,则下一行会引发错误:

store.dispatch(addTodo('Use redux-thunk'));
Run Code Online (Sandbox Code Playgroud)

另一个地方是AddTodo.tsx#L7,我在这里声明了由connect函数注入的 dispatch prop :

interface IAddTodoProps {
  dispatch: Dispatch<any>;
}

const AddTodo = ({ dispatch }: IAddTodoProps) => {
  ...
}
export default connect()(AddTodo);
Run Code Online (Sandbox Code Playgroud)

在这两个地方,都any覆盖了一个必须扩展的类型 …

javascript typescript redux redux-thunk react-redux

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

vs code .value 不被智能感知识别

我对 javascript 很陌生,但是当我工作时,我试图找到一种方法来获取用户将输入到 html 输入文本框中的文本,但由于某种原因,vs code 无法识别执行此操作所需的智能感知。

我的 HTML 代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <input type="text" id="first-input">
    <button id="submit-button">Submit</button>
    <script src="main.js" type="text/javascript"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

超文本标记语言

JavaScript:

let firstInput = document.getElementById('first-input');
let submitButton = document.getElementById('submit-button');

submitButton.onclick = function () {
    console.log(firstInput.value);
}
Run Code Online (Sandbox Code Playgroud)

JavaScript

为了获取输入文本元素内的数据,其代码是 .value,但是当我开始输入“.val-”时,VS code 的唯一建议是 .nodeValue。

没有 .value 选项,只有 .nodeValue

这意味着,为了得到我想要的东西,我使用了 VS Code 的智能感知无法识别的命令。然而,即使智能感知没有找到它,代码仍然按预期运行。

代码是功能性的

我需要安装或执行某些操作才能访问此信息吗?我担心还有很多其他东西它无法识别,并且会让学习这门语言变得更加困难。提前致谢

html javascript intellisense input

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

使用 Redux Toolkit 的 createEntityAdapter 进行动态数据网格

我有一个关于使用Redux ToolkitcreateEntityAdapter的问题。

我有一个应用程序,它使用AG 网格库的主/详细信息功能来显示包和包详细信息。应用程序首先加载包数据,然后在扩展每个包行时获取详细数据。

我想用createEntityAdapter规范化的方式管理数据,但我无法弄清楚如何处理详细网格的动态特性。现在,我有一个减速器切片,每次加载一组详细记录时都会创建一个新属性。属性键是id父包行的,因此在加载data包数据和详细数据后,我的切片最终看起来像这样:123

{
  PACKAGES: [{ id: 123, ...otherData }, { id: 124, ...otherData }],
  '123': [{ id: 456, ...otherDetailData }],
}
Run Code Online (Sandbox Code Playgroud)

当用户展开124包行时,会获取该包的详细数据,然后如下所示:

{
  PACKAGES: [{ id: 123, ...otherData }, { id: 124, ...otherData }],
  '123': [{ id: 456, ...otherDetailData }],
  '124': [{ id: 457, ...otherDetailData }],
}
Run Code Online (Sandbox Code Playgroud)

因此,虽然我可以将数据分解PACKAGES到其自己的实体适配器中,但我无法对详细网格执行相同的操作,因为我事先并不了解每个网格。

我想我和这个问题的人有类似的问题。

我考虑过将所有详细数据存储在单个实体适配器中,并由父级维护另一个索引id,但这似乎很难保持同步。

有任何想法吗?这种情况下的最佳实践是什么?

javascript reactjs redux redux-toolkit

0
推荐指数
1
解决办法
3982
查看次数