在过去的几个小时里,我一直在努力解决这个问题,我似乎无法在互联网上找到任何可以清楚地解释这个,据说是简单概念的东西。如何为TypeScript配置自定义全局接口(.d.ts文件)?
我目前正在使用Webpack2和TypeScript的ReactJS项目。除了一件事情之外,一切都完美运行 - 我无法找到一种方法将我自己写入单独文件的接口移动到整个应用程序中。
为了原型设计的目的,我最初在使用它们的文件中定义了接口,但最终我开始添加一些在多个类中需要的,这就是所有问题开始时的情况。无论我对我的tsconfig.json
所做的更改如何,无论我在哪里放置文件,我的IDE和Webpack都抱怨无法找到名称(Could not find name 'IMyInterface'
)。
这是我目前的tsconfig.json
文件:
{
"compilerOptions": {
"baseUrl": "src",
"outDir": "build/dist",
"module": "commonjs",
"target": "es5",
"lib": [
"es6",
"dom"
],
"typeRoots": [
"./node_modules/@types",
"./typings"
],
"sourceMap": true,
"allowJs": true,
"jsx": "react",
"moduleResolution": "node",
"rootDir": "src",
"forceConsistentCasingInFileNames": true,
"noImplicitReturns": true,
"noImplicitThis": true,
"noImplicitAny": false,
"strictNullChecks": true,
"suppressImplicitAnyIndexErrors": true,
"noUnusedLocals": true
},
"exclude": [
"node_modules",
"build",
"scripts",
"acceptance-tests",
"webpack",
"jest",
"src/setupTests.ts"
],
"types": [
"typePatches"
]
}
正如你所看到的,我tsconfig.json
是项目目录的根目录,所有的源是./src
,我把我的自定义在./typings
.d.ts
文件,包括它在typeRoots
。
我用TypeScript 2.1.6和2.2.0对它进行了测试,两者都不起作用。这一切让工作的
一种方法是将我的typings
目录为src
,然后import {IMyInterface} from 'typings/blah'
但并不觉得我的权利,因为它不是我需要使用。我希望这些接口在我的应用程序中“神奇地”可用。
编辑: 下面是一个示例app.d.ts
文件:
interface IAppStateProps {
}
interface IAppDispatchProps {
}
interface IAppProps extends IAppStateProps, IAppDispatchProps {
}
我需要export
他们也许declare
?我希望我不必将它们包装在命名空间中!
你绝对正确!原来我的问题是(如你所建议的),我从其他文件导入类/接口到我的声明文件。只要我删除这些导入,并只留下干净的'interface Foo {}'声明一切正常。 根据globals - 我完全明白为什么有声明是神奇的可用是一种不好的做法,并且正在考虑切换到自定义模块(实际上已尝试'声明模块MyApp {export interface Foo {}}'并且可以通过执行成功导入它'从'MyApp''导入{{Foo}),但现在魔术为我:) – Andris
谢谢,你的回答很多! – jasonslyvia