Muito boa essa definição! Gostei!

Após a leitura do material e das suas conclusões vejo que está parecido com a metodologia que estou aplicando atualmente onde:

  • Parametros de métodos e funções: Type
  • Classe, métodos e callbacks: Interface
  • métodos e callbacks privados não repetidos em outras classes: Type

E quando digo sobre métodos repetidos me refiro a isto por exemplo:

interface modeloInterface {
    dado: string;
}

class FornecedorUm {
    consumirApi(): modeloInterface {
        return {
            dado: 'oi'
        }
    }
}

class FornecedorDois {
    consumirApi(): modeloInterface {
        return {
            dado: 'tchau'
        }
    }
}

Nestes exemplos o retorno dado no método consumirApi precisa ser identico em todas as classes.

E o legal que vi em vários materiais, seu comentário e também o que estava pensando sobre os type é que eles são somente um alias enquanto que a interface, assim como em outras linguagens, é um contrato que deve ter seus parâmetros e métodos aplicados dentro da classe ou método onde ela é aplicada obrigatóriamente enquanto que o type não.

Além do exemplo que citei no post original eu poderia implementar esse nível de interfaces também diretamente na classe.

interface EmpresaCallback {
    doc: string
    razao: string
}

type BrasilAPITypes = {
  cnpj: string;
  razao_social: string;
};

interface GlobalInterface {
    formataPesquisaCnpj: (param: BrasilAPITypes) => EmpresaCallback
}

class ConsultaBrasilAPI implements GlobalInterface  {
    formataPesquisaCnpj(callbackApi: BrasilAPITypes): EmpresaCallback {
        return {
            doc: callbackApi.cnpj,
            razao: callbackApi.razao_social
         }
    }
}

Mas essa modelagem no meu caso eu preferi não seguir porque a classe em si é modelo "único" e não vai se repetir enquanto que o meu método formataPesquisaCnpj poderá se repetir em outra classe que receberá dados de outra fonte e o callback delas devem ser identicos indiferente da fonte de dados. Além que quero evitar o "interfaces hell" em toda a aplicação assim como existia com o callback hell antes do async/await hahaha :-D

Pelo que estou vendo de acordo com os comentários, alguns materiais, troca de experiências e o pouco que tenho de conhecimento é que não existe muito bem denifino do Typescript um "manual de boas práticas" sobre uso de interfaces diferentemente de outras linguagens.