小编bar*_*ise的帖子

Typescript 和 Gatsby:gatsby-plugin-ts + graphQL 查询集成

我用来gatsby-plugin-ts为我的 graphql 页面查询生成类型。

我遇到的问题是,生成的所有类型都会返回T | undefined所有字段的类型,因此我需要在任何组件中使用它们之前检查所有查询子字段,否则编译器将引发错误。

gatsby-plugin-image个例子。给出一个查询:

export const query = graphql`
  query IndexPage {
    banner: file(relativePath: { eq: "banner.jpg" }) {
      childImageSharp {
        gatsbyImageData(width: 1920)
      }
    }
  }
`;
Run Code Online (Sandbox Code Playgroud)

结果data.banner应该传递给getImage函数,但如果您尝试这样做,打字稿可以理解地抛出以下错误,因为 undefined 不能分配给IGAtsbyImageData预期的getImage 打字稿错误

当涉及更复杂的查询(例如来自 markdownremark 插件的查询)时,情况会更糟:每次都需要手动检查一个查询结果的所有子字段。有解决办法吗?

typescript reactjs graphql gatsby gatsby-plugin

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

Neovim LSP:找不到语言服务器

我正在尝试设置 neovim 的新 LSP。

按照手册,我下载了插件 lspconfig、pyright 和 typescript 语言服务器,并在我的 中获取了设置init.vim,如下所示:

local nvim_lsp = require('lspconfig')

nvim_lsp.pyright.setup{}
nvim_lsp.tsserver.setup{}
Run Code Online (Sandbox Code Playgroud)

在有效的 root_dir 中打开.py.ts文件(具有 package.json 和/或 setup.cfg,...)后,我没有收到任何代码错误,没有智能感知,并且:LspInfo显示附加了 0 个客户端。

现在有一个问题:我使用yarn global,而不是安装语言服务器,npm -g并且我使用的是 asdf 版本管理器,因此它们的二进制文件可能不在预期的路径中。

LSP 是否在预定义路径中搜索服务器?如果是这样,我该如何添加到这些路径?

typescript neovim pyright tsserver

5
推荐指数
0
解决办法
3803
查看次数

Typescript:根据接口键获取接口属性的类型

我正在构建一个需要一次更新对象的一个​​字段的函数。该对象是通过接口定义的T

interface T {
  a: TypeA;
  b: TypeB;
  c: TypeC;
}
Run Code Online (Sandbox Code Playgroud)

这应该是该函数的类型签名:

(key: keyof T, value: typeof T[key]) => void
Run Code Online (Sandbox Code Playgroud)

这会生成错误:'key' refers to a value, but it is being used as a type here. Did you mean 'typeof key'?。IMO 我的意思不是typeof key,因为typeof key可以是 的任何键T,但我希望value属性的类型为TypeAifkey = a等。

如何选择对应键值的类型T

javascript strong-typing typescript

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