首页 > 解决方案 > 转译代码时,TypeScript 的接口参数不起作用

问题描述

我在一个名为 get() 的类中有一个方法

import optionsInst from "./options";
get(url, opt: optionsInst){}

optionsInst 是另一个文件的接口

export interface Options {
  tipoRespuesta?: "json" | "arrayBuffer";
  params?: string;
  data?: string;
  headers?: HeadersInit;
}
export default Options;

我的 tsconfig 是:

{
  "compilerOptions": {
    "target": "es6",
    "allowSyntheticDefaultImports": true,
    "sourceMap": true,
    "outDir": "./dist",
    "module": "CommonJS",
    "declaration": true,
    "allowJs": true
  },
  "exclude": ["node_modules"]
}

为了进行转译,我使用npm run build并生成了一个 dist 文件夹。为了测试它,我创建一个新文件并运行npm test.js

var CL = require("../dist/index.js");

let instancia = new CL("https://reqres.in/api/");
instancia.get("users").then(console.log);

错误是这样的:

  if (utils.isEmpty(opt.headers)) {
                              ^

TypeError: Cannot read property 'headers' of undefined

标签: javascripttypescriptinterfacetranspiler

解决方案


如果以下行在get(url, opts: optionsInst)类中的方法内

if (utils.isEmpty(opt.headers)) {

那么你的问题是你在没有定义 ops 参数的情况下调用它,这里:

instancia.get("users").then(console.log);

该错误只是说它无法读取该属性opt.headers,因为optis undefined

实际上,您应该在上面的那一行中收到 Typescript 错误,告诉您opts调用中缺少参数 - 检查一下。但是 Typescript 仍然会编译代码,只是在你运行它时导致运行时错误——显然 Typescript 试图帮助你避免的事情!


推荐阅读