typescript - 如何在 Deno 中提取类型

标签 typescript visual-studio-code deno

我正在检查 Deno,发现其中一个入门示例非常优雅:

import { serve } from "https://deno.land/x/std@v0.2.10/http/server.ts";
const s = serve("0.0.0.0:8000");

void async function main() {
  for await (const req of s) {
     req.respond({ body: new TextEncoder().encode("Hello World\n") });
  }
}()

我正在使用 VS Code 编写 Deno 脚本,但我不确定如何让编辑器知道导入函数的类型,例如 serve .我认为 Deno 支持 IDE 可能为时过早,但如果有解决方案或变通方法,我想知道它。

我需要安装 @types包或类似的东西? importreference一些.d.ts声明文件?使用 serve 时如何让 VS Code 提供代码完成建议和显示类型注释本示例中的函数以及 Deno 中的任何导入脚本?

最佳答案

tldr
安装 denoland.vscode-deno 扩展 1. 然后 enable特定项目中的 Deno,例如<proj-root>/.vscode/settings.json :

{
  "deno.enable": true, // enables extension
  "deno.lint": true, // inline deno lint diagnostics, requires `deno.unstable`
  "deno.unstable": true // also provides unstable type declarations in VS Code
}
v2.3.0 开头,您也可以使用 deno: Init 向导 2:
enter image description here
要集成 TS 工作区版本而不是 VS Code 内置版本,请查看 linked docs .
1 This one已弃用。
2 注意:在一个新的空项目中,至少需要存在一个源文件,向导才能正常工作。

更多细节
扩展有什么作用?
  • 允许显式 .ts VS Code 中的扩展
  • 解析 URL 导入说明符,如 "https://deno.land/std@0.56.0/http/server.ts"
  • 集成 Deno 运行时类型(例如 Deno.writeFile )

  • 如何解析 .ts 的类型模块
    通过上述扩展,VS Code 允许 .ts导入的文件扩展名并将 URL 导入解析为 local disk cache .编译器可以使用这些缓存的类型定义进行检查。最后,获取所有源并重新启动 TS 服务器/重新加载 VS 代码:
    deno cache https://deno.land/std/http/server.ts # fetch and compile from URL 
    # or main project file
    deno cache <your main file>.ts # fetches all its dependencies
    
    server.tsStandard Library 的一部分, 这只是一个更严格维护的远程 .ts 集合模块,所以它也将被正确输入。
    如何解析 .js 的类型模块
    Deno 提供 additional ways引用 .d.ts .js 的文件文件。
    在导入代码位置指定类型定义:
    // @deno-types="./foo.d.ts"
    import * as foo from "./foo.js";
    
    在主机代码位置指定类型定义:
    /// <reference types="./foo.d.ts" />
    export const foo = "foo";
    
    替代方案:Deno 可以读取自定义 X-TypeScript-Types 来自远程导入的 HTTP header 。
    如何使用自定义tsconfig.json给定的 tsconfig.json项目中的文件与 Deno 默认配置合并,例如:
    {
      "compilerOptions": {
        // set a custom, deviant value
        "noImplicitAny": false // deno default is true
        // (this is just an example - use strong types, whenever possible)
      }
    }
    
    包括 -c 选项,因此 VS Code 和 Deno CLI 具有相同的编译器设置:
    deno run -c ./tsconfig.json main.ts 
    
    使用方法 --unstable 类型
    最简单的选项是设置 "deno.unstable": true ( PR ) 在 settings.json并重启 VS Code,查看 tldr部分。
    手动替代
    cd <your-project>
    deno types --unstable > deno.runtime.d.ts
    touch tsconfig.json # (1); jsconfig.json for JS projects also possible
    
    VS 代码 automatically includes deno.runtime.d.ts与现有的 tsconfig.json (1)。

    重大变化vscode-deno v1.26.0
    扩展名必须是 explicitly enabled通过 "deno.enable": true.vscode/settings.json项目的(默认为 false )。以前,默认值为 true .vscode-deno < 1.25.0
    在每种情况下(稳定和不稳定)都安装 Deno 类型 - 请参阅 "How to use --unstable types" .

    关于typescript - 如何在 Deno 中提取类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54794933/

    相关文章:

    typescript - ionic 2 "Type ' { }' is not assignable to type ' 任何[]”

    python - vscode远程容器中的自动完成python

    javascript - *.d.ts 文件从哪里来?

    deno - 类型 'URL' 不可分配给类型 'string'

    angular - 使用反引号运算符在字符串中进行插值

    javascript - TypeScript 产生无法访问的代码

    javascript - 访问 token 和响应数据

    visual-studio-code - VS Code 显示 eslint 错误,但 vitest 正在运行。 'vi' 未定义

    babeljs - 如何在 Deno 中使用 Babel?

    typescript - 如何避免VSCode中的 "an import path cannot end with .ts extension"错误?