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