Una forma de subclase NamedTuple para fines de verificación de tipos

Tengo varias tuplas con nombre que comparten algunos campos. Tengo una función que acepta estas tuplas y garantiza que solo interactuará con los campos compartidos. Quiero escribir este código en mypy.

Un ejemplo del código sería:

from typing import NamedTuple

class Base(NamedTuple):
    x: int
    y: int


class BaseExtended(NamedTuple):
    x: int
    y: int
    z: str

def DoSomething(tuple: Base):
    return tuple.x + tuple.y

base = Base(3, 4)
base_extended = BaseExtended(5, 6, 'foo')

DoSomething(base)
DoSomething(base_extended)

Cuando ejecuto mypy en este código, obtengo un error predecible:

mypy_example.py:20: error: el argumento 1 de "DoSomething" tiene un tipo incompatible "BaseExtended"; "Base" esperada

¿No hay forma de estructurar mi código y mantener mypy typechecking? No puedo heredar BaseExtended de Base, ya que hay un error en la implementación de herencia NamedTuple:

https://github.com/python/typing/issues/427

Tampoco quiero usar una fea "Unión [Base, BaseExtended]", ya que esto se rompe cuando intento escribir una lista, ya que "Lista [Unión [Base, BaseExtended]]" no es igual a "Lista [BaseExtended ] "debido a cierta magia mypy sobre los tipos de variante / covariante:

https://github.com/python/mypy/issues/3351

¿Debo abandonar la idea?

Respuestas a la pregunta(2)

Su respuesta a la pregunta