TypeScript'te yazılmış bir nesneden anahtarlar dinamik olarak nasıl kaldırılır
Aug 16 2020
Yazılan bir nesneden anahtarları dinamik olarak nasıl kaldırabilirim?
Örneğin, arayüzüm QUERY_PARAMS
:
export interface QUERY_PARAMS {
query: string;
min_height?: string;
max_height?: string;
min_width?: string;
max_width?: string;
color?: string;
image_type?: IMAGETYPE;
order?: ORDER;
orientation?: ORIENTATION;
}
Anahtarları dinamik olarak silmeye çalışma kodum:
async getAllImages(inputParams: QUERY_PARAMS) {
for (let key in inputParams) {
if (!inputParams[key]) {
delete inputParams[key]
}
}
// ...
}
Şu hatayı atar:
öğe örtük olarak 'herhangi' bir türe sahiptir çünkü 'dizge' türünün ifadesi 'QUERY_PARAMS' dizini oluşturmak için kullanılamaz. 'QUERY_PARAMS' türünde 'string' türünde bir parametreye sahip dizin imzası bulunamadı
Yanıtlar
1 bsapaka Aug 16 2020 at 01:16
Hata , ie key
özniteliği olacak kadar spesifik olmayan bir dizedir . Şu anda TS, bir döngünün yineleme değişkeni için bir tür tanımlamanıza izin vermiyor ( sayı # 3500 ), ancak döngü içindeki anahtarda bir tür onaylama yapabilirsiniz:inputParams
keyof QUERY_PARAMS
for
export interface QUERY_PARAMS {
query: string;
min_height?: string;
// ...
}
async function getAllImages(inputParams: QUERY_PARAMS) {
for (let key in inputParams) {
const k = key as keyof QUERY_PARAMS; // <-- type assertion
if (!inputParams[k]) {
delete inputParams[k]
}
}
// ...
}
const p: QUERY_PARAMS = {
query: 's',
min_height: undefined,
}
console.log(p); // { query: 's', min_height: undefined }
getAllImages(p);
console.log(p); // { query: 's' }
Gene Simmons, KISS Çizgi Romanlarının Potansiyel Olarak "İnsanlığı Yeniden Yaratabileceğini" Söyledi
Donovan, Şarkılarından 1'ini The Beatles'ın "Lucy in the Sky with Diamonds" şarkısıyla karşılaştırdı
Charly Reynolds Yakın Zamandaki Vokal Kord Ameliyatını Açıkladı: 'Şarkı Söylemekte Sorun Yaşıyordum'
Tom Girardi Dolandırıcılık Suçlamalarından Yargılanma Yetkisinin Belirlenmesi İçin Duruşmaya Katıldı