Тип list
в вашем примере выводится компилятором как Array<{name: string}>
, и, таким образом, компилятор полностью забыл конкретные строковые литеральные типы свойств name
к тому времени вы пытаетесь определить Title
.
Вам придется изменить, как вы назначаете list
, хотя бы несколько. Самое простое, что можно сделать (что может или не может удовлетворить ваши потребности), это использовать const
утверждение , которое просит компилятор вывести как можно более узкий тип:
export const list = [
{ name: 'parentTitle', },
{ name: 'anotherTitle', },
{ name: 'whatever', },
] as const;
Теперь предполагается, что list
имеет тип:
/*
const list: readonly [
{ readonly name: "parentTitle";},
{ readonly name: "anotherTitle";},
{ readonly name: "whatever";}
]
*/
, который является кортежем, доступным только для чтения, только для чтения с конкретными свойствами name
в определенном порядке. Исходя из этого, мы можем использовать типы поиска для определения Title
:
type Title = typeof list[number]["name"];
// type Title = "parentTitle" | "anotherTitle" | "whatever"
Хорошо, надеюсь, это поможет; удачи!
Детская площадка ссылка на код