如何导入打字稿?

6 typescript node.js-got

我正在尝试在我的打字稿程序中导入从“got”获取的内容,以将网址转换为可流式文件,但我尝试以不同的方式导入它,并且我总是收到如下错误: can only be default-imported using the 'esModuleInterop' flag

我的问题是如何正确导入而不会出现错误?或者是否有另一种方法可以将 url 转换为打字稿中的可流式文件?

import { sha256 } from 'js-sha256';
import {Metadata} from './metadata';
import * as fs from 'fs'
const pinataSDK = require('@pinata/sdk');
import got from 'got';
export const ARC3_NAME_SUFFIX = "@arc3"
export const ARC3_URL_SUFFIX = "#arc3"
export const METADATA_FILE = "metadata.json"
export const JSON_TYPE = 'application/json'
export const JSONObject = "metadata.json"
export function asaURL(cid: string): string { return ipfsURL(cid)+ARC3_URL_SUFFIX }
export function ipfsURL(cid: string): string { return "ipfs://"+cid }
Run Code Online (Sandbox Code Playgroud)

小智 9

版本 got@^12.0.0 也有同样的问题。

降级到got@11.8.2并且它起作用了。


Tom*_*den 1

将此选项添加到您的 tsconfig.json 文件中:

{
  "compilerOptions": {
    "esModuleInterop": true
  }
}
Run Code Online (Sandbox Code Playgroud)

https://www.typescriptlang.org/tsconfig#esModuleInterop

这是必需的,因为 CJS 导出和 MJS 导出开箱即用不兼容(因为 CJS 没有默认导出的概念,但 MJS 有)。

启用此互操作允许 TS 将 CJS 依赖项导入到其模块中。


如果人们仍在为此苦苦挣扎,请尝试使用xnr它来运行源代码,我创建它几乎就是为了这个目的,因为 TS、模块和 npm 包之间的互操作可能非常令人讨厌,有时您想要一些可以正常工作的东西!:)