1
對於一個接口,可以使用Partial<X>
,Mapped Type來表示「允許X的所有屬性,但是不要期望它們」。是否有TypeScript'Partial <any>`類型的函數參數接受`any`,但是`void`?
,這樣下會導致編譯器錯誤:
interface X { foo: boolean }
function doSomething(x: Partial<X>) {
let aBoolean: boolean = x.foo; // ERROR: possibly undefined
}
doSomething({ foo: true }); // OK
doSomething({}); // OK
doSomething(true); // ERROR: Type 'boolean' has no properties in common with 'Partial<X>'
我願做同樣的事情any
說「這個功能可以接受任何作爲參數,但你不能指望什麼在那裏」
function doSomething(x: Partial<any>) {
let aBoolean: boolean = x.foo; // OK, but I wish it wasn't
}
doSomething({ foo: true }); // OK
doSomething({}); // OK
doSomething(true); // OK
doSomething(/* etc. */); // OK
我想我的函數接受任何和一切作爲參數,但裏面的功能我不應該能夠在對象上訪問任何屬性,而不首先檢查他們。如果功能x
的類型爲void
或never
,則甚至可以。
我並不感到驚訝Partial<any>
並不像我希望的工作 - 我絕對不問「爲什麼不Partial<any>
的工作,我希望它做的方式。」我問:
我可以使用參數什麼類型x
這樣:
- 它接受的任何參數/每一種類型的
- 在函數內部的
x
類型是一些地方每個屬性是可能未定義(或x
是void
類型等)
只需要'x'可選? [TS playground](https://www.typescriptlang.org/play/#src=const%20act%20%3D%20(x%3F%3A%20Partial%3Cany%3E)%20%3D%3E%20 !! x.foo%3B%0D 0A%%0D%0Aact(%7B%20foo%3A%20true%20%7D)%3B%20%2F%2F%20OK%0D%0Aact(%7B%7D)%圖3B%20%2F%2F%20OK%0D%0Aact(真)%3B%20%2F%2F%20OK%0D%0Aact(%2F *%20etc。%20 *%2F)%3B%20%2F% 2F%20OK) –
在這個例子中執行'!! x.foo'時沒有錯誤 - 或者如果將其改爲'{let bar:string = x.foo; }'。我錯過了什麼嗎? – alexanderbird
關鍵是在函數內部不能保證'x'具有什麼屬性,我希望類型能夠反映這一點。 – alexanderbird