如果我有一個文件myinterface.ts定義接口,而無需把它們導出
interface MyInterface {
foo() : string
}
和第二文件myimplementation.ts
class MyImplementation implements MyInterface {
...
}
問題1:爲什麼這項工作?我沒有導出界面。
然後,如果我想改變foo() : string
到foo() : SomeType
其中SomeType
是另一個模塊中定義,我需要修改myinterface.ts是:
import { SomeType } form 'some-module';
interface MyInterface {
foo() : SomeType
}
這會導致錯誤的myimplementation.ts說「無法找到名字'MyInterface'「。
問題2:,當你添加一個進口(或出口)與當文件只包含接口* .ts文件改變了什麼樣的變化(和他們不甚至標記爲導出)。
我知道最好的做法是簡單地將我的界面標記爲導出並執行import {MyInterface} from 'myinterface';
,但我試圖理解原始版本的工作原理以及影響。
TS接口在生成可執行代碼的意義上並不是真實的,它們充當類型系統的合同並在輸出之前被丟棄。在這個意義上,它們很像'enum's。您不能導入或導出它們,因爲它們不存在。 – ssube
我知道,不過從'some-module';'導入{SomeInterface}似乎是有效的,所以我想這是TSC的某種暗示。其實我很好奇使用不同文件中定義的接口。 – Kir
@ssube這不完全正確。如果我將實現的接口更改爲'SomeUndefinedInterface',則會引發編譯器錯誤。這個接口必須在某個地方定義,我同意@Kir認爲它知道另一個文件中的定義沒有明確的導入是神祕的:「相反,要消費從一個導出的變量,函數,類,接口等不同的模塊,它必須使用其中一個導入表單導入,模塊是聲明性的;模塊之間的關係根據文件級別的導入和導出來指定。 Typescript手冊 – Orphid