typescript - { [x: string]: any } türü ne anlama geliyor?
Bu makaleyi okudum ve imzayı anlayamıyorum:
type FuncWithOneObjectArgument<P extends { [x: string]: any }, R> = (props: P) => R;
{ [x: string]: any} ne anlama geliyor? Bunun any tipinde değerleri olan ve anahtarları... ne olan bir sözlük olduğunu varsaydım? Liste mi? Stringlerden oluşan mı?! x ne demek? x'i kaldırmayı denedim ama bu sözdizimi hatasına yol açtı... Bu tipi nasıl okumalı?
Cevap #1
Bu, nesnenizin anahtarlarının ne olabileceğini tanımlar. Sizin durumunuzda, anahtarlarınız yalnızca string türünde olabilir. Ve değerleriniz ne olursa olsun olabilir.
Bunun ardındaki sebep şudur ki, TypeScript'te bir nesnenin belirli bir özelliğe sahip olmasını tanımlayabilirsiniz :
type obj = {property1: string, property2: any};
Bu, geçerli olması için her iki özelliğe de sahip GEREKEN bir nesne türü oluşturur.
Bunun nedeniyle, anahtar türünü tanımlamanın sezgisel bir yolu yoktur. Bu yüzden köşeli parantez kullanıyoruz.
type obj = {[keys: string]: any};
String ve int gibi tipler için anlamsız görünebilir, ancak anahtarlarınızın ne olabileceğini tanımlamak için bir birleşim tipi operatörü kullanabilirsiniz :
type obj = {[keys in 'key1'|'key2'|'key3']: any};
Bu sözdizimi, anahtarlarınızın yalnızca key1, key2 veya key3 olabileceğini söylüyor.
