我有一個過濾器的映射,定義如下:
type TFiltersNext = { [key: string]: { type: 'date' | 'enum' } };
const filtersNext: TFiltersNext = {
foo: { type: 'date' }
};
我想在這樣的類型中定義有效的篩選器名稱:
type TFilterNameNext = keyof typeof filtersNext;
但是,這不起作用,因為此測試不會引起問題:
const filterName: TFilterNameNext = 'bar';
正如我們所看到的,bar
不是一個有效的篩選器名稱。
I recreated this in TS Playground here - https://www.typescriptlang.org/play/?#code/C4TwDgpgBAKgYgSwDbAgJwM4DkIA9hQC8UA3lANoDWEIAXFBsGggHYDmAuvWaJPQOQATAIap+UAD5R+EFgFcAtuIC+UZQG4AUJoDGAexaMoAM2SpMOfPXhn02PAWIlNUE3r3covCAJFi1mhqa3rCIKOhYwgoQlo5Q1CB6xl7gEEkmthYOWvqGBKbhaJHR1mHmxTEORNLG7sL86kA
如果我從const filtersNext: TFiltersNext = {
中刪除: TFiltersNext
,它是有效的,但我會失去對值形狀的強制執行。
有人知道發生了什么事嗎?
使用
satisfies
關鍵字:然后您將得到錯誤并獲得顯式密鑰。您不能顯式地告訴對象的類型是
:TFiltersNext
,因為它的鍵被聲明為任何東西([key: string]
)