Se eu tiver algum código como:
type Bravo = {
b?: string;
}
type Charlie = {
c:Bravo['b']
}
function acceptsCharlie(value: Charlie){
//'value.c' is possibly 'undefined'.(18048)
value.c.split('');
}
Isso faz sentido - o tipo Charlie
herda a string opcional de Bravo
.
Podemos resolver isso usando o Required
tipo de utilitário:
type Bravo = {
b?: string;
}
type Charlie = {
// 👇
c:Required<Bravo>['b']
}
function acceptsCharlie(value: Charlie){
// no error here
value.c.split('');
}
Fácil.
Entretanto, se eu adicionar mais uma camada de pesquisa de digitação:
type Alpha = {
a?: string;
}
type Bravo = {
b: Alpha['a'];
}
type Charlie = {
c: Required<Bravo>['b']
}
function acceptsCharlie(value: Charlie){
//'value.c' is possibly 'undefined'.(18048)
value.c.split('');
}
Isso Required
não resolve mais o problema para mim.
O que acontece?