在過去的幾個小時裏,我一直在努力解決這個問題,我似乎無法在互聯網上找到任何可以清楚地解釋這個,據說是簡單概念的東西。如何爲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