StateShape: {
    [name: string]: Pattern;
}

It looks like a copyRecord pattern, but the interpretation is different. Each property is distinct, is checked and changed separately.