```python
def merge_settings(base: dict, ours: dict, theirs: dict) -> dict:
    if not all(isinstance(value, str) for value in base.values()) or \
       not all(isinstance(value, str) for value in ours.values()) or \
       not all(isinstance(value, str) for value in theirs.values()):
        raise ValueError("All values in base, ours, and theirs must be strings.")

    merged = {}
    for key in base:
        if key in ours and key in theirs:
            if ours[key] == theirs[key]:
                merged[key] = ours[key]
            elif ours[key] != theirs[key]:
                merged[key] = ours[key]
        elif key in ours:
            merged[key] = ours[key]
        elif key in theirs:
            merged[key] = theirs[key]
        else:
            merged[key] = None

    for key in ours:
        if key not in base:
            merged[key] = ours[key]
    for key in theirs:
        if key not in base:
            merged[key] = theirs[key]

    return merged
```