为什么找不到接口类型是Typescript文件

为什么找不到接口类型是Typescript文件,typescript,Typescript,编辑:我正在更新这个问题,因为我最初误解了*.d.ts文件的用途。问题要么是“类型空间”与“值空间”之间的问题,要么是编译器找不到接口定义 我创建了一个空的TypeScript项目: npm i typescript --save-dev npx tsc --init tsconfig.json: { "compilerOptions": { "target": "es5", "module"

编辑:我正在更新这个问题,因为我最初误解了*.d.ts文件的用途。问题要么是“类型空间”与“值空间”之间的问题,要么是编译器找不到接口定义

我创建了一个空的TypeScript项目:

 npm i typescript --save-dev
 npx tsc --init
tsconfig.json:

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true
  },
  "include": [
    "src/**/*.ts",
    "backend_types/**/*.ts"
  ]
}

我相信默认的导入策略是Node

我创建了
src/backend\u type/relay.ts

export interface Relay {
  Name: string;
}

export function newRelay(): Relay {
  const relay: Relay = {
    Name: '',
  };
  return relay;
}
import { Relay, newRelay } from 'relays'

let relay: Relay = newRelay()

console.log(relay)
并创建了
src\main.ts

export interface Relay {
  Name: string;
}

export function newRelay(): Relay {
  const relay: Relay = {
    Name: '',
  };
  return relay;
}
import { Relay, newRelay } from 'relays'

let relay: Relay = newRelay()

console.log(relay)
现在,当我编译代码时,tsc找不到继电器类型:

> npx tsc
src/main.ts:1:33 - error TS2307: Cannot find module 'relays' or its corresponding type declarations.

1 import { Relay, newRelay } from 'relays';
                                  ~~~~~~~~
实际上,如果我查看从
relays.ts
生成的javascript,函数存在,但中继类型不存在。这是有道理的,因为“类型”在javascript中不存在,只有在typescript中存在,并且接口就是一个类型。我显然混淆了“类型空间”和“价值空间”


我的问题是:我甚至不能在main.ts中创建接口类型Relay的“value”实例,因为编译器似乎找不到类型定义。为了让编译器找到接口定义,我需要在tsconfig.json中更改什么?如果我使用
--traceResolution
开关,输出中的每一行都会显示包含
节点\u模块的路径
-如果要将类型定义放在其他位置怎么办?

如果使用命令行(cli),您将无法同时提供file选项和
tsconfig.json
文件(通过
--project
选项)这意味着,如果您提供了文件
main.ts
,则必须同时为
回放提供键入内容,但似乎很难同时提供两个文件(您可以了解更多有关模式的信息,以便将它们都包括在内)

无论如何,我建议您采取以下两种选择之一:

  • 使用
    include
    选项将内容放入配置文件:
    tsconfig.json
{
“编译器选项”:{
// ...
},
“包括”:[
“src/***.ts”
]
}
然后您只需运行:
npx tsc
,而不传递任何其他内容

  • 仍然通过CLI传递文件,但您应该将其放入目录中,以便更容易一起传递,例如:
-src
--梅因酒店
--重播
然后您运行所有这些:

npx tsc src/*

PS:请记住,tsconfig在这种情况下无效

您可以共享tsconfig.json文件吗?将其添加到上面的帖子中。我相信默认的导入策略是Node.js—通过尝试整理来读取。请注意,
.d.ts
文件中不能有实现代码。@AluanHaddad是的,我对此感到困惑。我知道我不应该这样做,但vscode允许这样做。因此,无法识别d.ts文件的内容。可能是VS代码中存在冲突的插件。打开“命令托盘”并重新加载窗口,禁用扩展以进行验证。然后找出是哪个扩展名造成的。选项1生成一个main.js文件,但无法运行:错误:
找不到模块“中继”
您是否安装了Replay?很抱歉延迟了回复。我的问题是如何指定编译器在哪里查找库和模块,这样我就不用麻烦把它们放在同一个目录中了。我误解了*.d.ts文件的用途-现在重新处理原始问题。不确定你的意思,但只要你告诉tsc编译过程中的所有文件,那么它应该可以工作,而你的上述案例只有一个文件主文件,所以它确实抱怨了这个问题。添加所有要编译的文件到CLI是不切实际的,因为我正在尝试还试图在更大的Vue项目中实现这一点。