This is an important question.
If isinstance(obj, MyTypedDict) was possible, then the following could work:
class MyTypedDict(TypedDict):
x: int
y: str
...
match mydict:
case MyTypedDict(): ...
…and maybe also:
match mydict:
case MyTypedDict(x=42, y='spam'): ...
The main problem I see with answering that question is how deep such checks should be, i.e., whether not just names (keys) were checked, but also corresponding values’ runtime types (e.g. the type of mydict['x']) [I suppose: yes], and – then – what to do with stuff annotated with not-runtime-checkable constructs (e.g.,list[str]): forbid completely, or limit checks to what is easily runtime-inspectable? (but then: how to delineate usable – clear and intuitive – rules?) 
***
Perhaps the only (?) viable option is making the feature entirely opt-in, by providing a new decorator (with clear set of rules what would be allowed and how it would be interpreted…) – something along the lines:
@deeply_checkable
class MyTypedDict(TypedDict):
x: int
y: list[str]
...
match mydict:
case MyTypedDict(): ...
# ^ checks whether this is true:
# (isinstance(mydict, dict)
# and isinstance(mydict.get('x', MISSING), int)
# and isinstance(y := mydict.get('y', MISSING), list)
# and all(isinstance(item, str) for item in y))
match mydict:
case MyTypedDict(x: 42, y=['a', 'b', 'c']): ...
# ^ checks whether this is true:
# (isinstance(mydict, dict)
# and isinstance(x := mydict.get('x', MISSING), int)
# and x == 42
# and isinstance(y := mydict.get('y', MISSING), list)
# and all(isinstance(item, str) for item in y)
# and list(y) == ['a', 'b', 'c'])
And, perhaps
, such @deeply_checkabledecorator could even be allowed to be applied to other constructs, e.g., list[str]?
@dataclass
class MyDC:
x: deeply_checkable(list[str])
…or, perhaps, a related special form were provided to do that, e.g.:
@dataclass
class MyDC:
x: DeeplyCheckable[list[str]]
But, still, such constructs could not support, e.g., Iterator[str], Generator[str, int], etc. 