from typing import Dict
from typing import List


def collect_tra_trb(s: str) -> Dict[str, List[str]]:
    """
    Given semicolon separated TRA/TRB listings in a string, separate them and return a mapping
    If either TRA/TRB is missing, corresponding return will be a list with a single empty string

    >>> collect_tra_trb("TRA:foo;TRA:baz;TRB:bar")
    {'TRA': ['foo', 'baz'], 'TRB': ['bar']}
    >>> collect_tra_trb("TRB:bar")
    {'TRA': [''], 'TRB': ['bar']}
    >>> collect_tra_trb("TRB:bar;TRA:foo")
    {'TRA': ['foo'], 'TRB': ['bar']}
    """
    retval = {"TRA": [], "TRB": []}
    for part in s.split(";"):
        k, v = part.split(":")
        retval[k].append(v)
    # Return empty strings if TRA/TRB are not found
    if not retval["TRA"]:
        retval["TRA"].append("")
    if not retval["TRB"]:
        retval["TRB"].append("")
    return retval