我有帶有類宣告的.ts檔案和帶有介面宣告的.d.ts檔案。
.ts 檔案示例:
class A {
constructor() {
this.name = "Jo";
}
}
.d.ts 檔案示例:
interface A {
name: string
}
所以,問題是 - 一切正常,A 類自動檢測介面 A 并實作它。
但是,當我添加名為 export或default export的類時,如下例所示 - 介面實作消失,它再次清晰類 A。
export default class A {
constructor() {
this.name = "Jo";
}
}
要么
class A {
constructor() {
this.name = "Jo";
}
}
export { A }
兩種變體都會導致相同的問題 - “型別‘A’上不存在屬性‘名稱’”。
如果將介面添加到同一個檔案,它將起作用,但我需要這個介面用于全域使用,并且不想直接在類或同一個檔案中撰寫相同的實作。
那么,發生了什么事,我應該怎么做才能讓事情變得正確?
uj5u.com熱心網友回復:
當我將您的代碼放在打字稿游樂場時,我收到此錯誤:
A 類合并宣告“A”不能包含默認匯出宣告。考慮添加一個單獨的“匯出默認 A”宣告。(2652)
如果您遵循該建議:
interface A {
name: string
}
class A {
constructor() {
this.name = "Jo";
}
}
export default A
它可以像您期望的那樣作業Playground
但是,如果其中的檔案class A是 Typescript,那么您根本不需要該.d.ts檔案,您的課程應該是:
class A {
name: string
constructor() {
this.name = "Jo";
}
}
哪個是它自己的隱式介面:
const a: A = { name: 'Foo' } // fine
操場
uj5u.com熱心網友回復:
.d.ts在檔案中撰寫介面并將屬性與同名類沖突是最不尋常的。
慣用的做法是將介面寫在一個檔案中:
export interface Nameable{
name: string
}
implements并將其匯入另一個并通過關鍵字正確使用它:
import {Nameable} from './Nameable';
export class A implements Nameable{
// etc
}
當然,您可以將相同的界面匯入任何其他檔案。讓事情全球化很少能達到最好的效果。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/436770.html
上一篇:'while(temp)'是如何作業的,而'while(temp.next)'是如何作業的?
下一篇:靜態類特征的條件執行路徑
