我使用TypeScript版本2.3.4。我想編寫一個接受必須具有指定字段的對象的函數。但是這個對象不應該包含任何其他字段。我怎樣才能做到這一點?TypeScript嚴格的類/接口
現在這隻適用於我定義對象內聯。但是,如果我使用額外字段的另一個對象 - 編譯器將允許它。什麼是完全錯誤的。
實施例:
function foo(arg: { a: string }) { // there is tons of fields actually
// ...
}
foo ({a: "qwerty"}); // No Error - ok
foo ({a: "qwerty", b: 123}); // Error - ok
let bar = {
a: "qwerty",
b: 123
};
foo (bar); // No Error - NOT OK !!!
相同的代碼可與接口,類類型聲明來所著 - 這是同樣的問題。
現在我必須手動從對象中提取字段,以確保沒有額外的字段。但是我不能在整個代碼中將這個解決方案傳播給1000個函數(我真的需要這個) - 這太亂了。我創建API包裝,我需要確保沒有傳遞給服務器的額外或錯誤的字段。
看起來像是故意的。請參閱[此問題](https://github.com/Microsoft/TypeScript/issues/13444)和[this](https://github.com/Microsoft/TypeScript/issues/3755)以獲取更多討論。 – Saravana
Saravana,是的,我讀過這篇文章,但在這些討論中沒有回答我的問題。我認爲避免接口的嚴格性會更好,但將其留給班級。 –