Pesquisa de site

Typescript: Por que o Tipo Utilitário Partial não funciona em Tipos de Acesso Indexado


Ao usar Partial em tipo de acesso indexado, ele não define as propriedades como opcionais:

por exemplo

class Klass {
    prop = {
        a: true,
        b: 42, 
    };

    func() {
        let val: Partial<typeof this["prop"]>;
        val = {a: false}; // error: Type '{ a: false; }' is not assignable to type 'Partial<this["prop"]>'.
        val = {a: false, b: 13}; // ok
    }
}

(veja no playground do TypeScript)

meu caso de uso é algo como:

class Base {
    setState(s: Partial<typeof this["state"]>){}
}

class Subclass extends Base {
    state = {
        a: true,
        b: 42,  
    };

    func() {
        this.setState({a: false});
    }
}

por que isso não está funcionando e como posso fazer funcionar?

Resposta #1

Você pode usar o nome da classe e acessar prop sem usar isto:

let val: Partial<Klass["prop"]>

Parque infantil