TypeScript'te yazılmış bir nesneden anahtarlar dinamik olarak nasıl kaldırılır
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
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
Nicole Kidman, Michael Keaton ve Val Kilmer'in Batman Olarak Paylaştığı Bu 1 Çekici Özelliğe Bayıldı
Tom Girardi Dolandırıcılık Suçlamalarından Yargılanma Yetkisinin Belirlenmesi İçin Duruşmaya Katıldı
Kevin Jonas'ın Kızı Alena, Doğum Günü Fotoğrafında Büyümüş Görünüyor: '9 Yaşında Gerçek Hissetmiyor'