К сожалению, литералы с ключами неработают, так что только так:
const asSomeInterface = <K extends PropertyKey>(obj: { [P in K]: P extends `@${string}` ? string : never }) => obj;
asSomeInterface({
'@asd': 'asd',
'asd': 'asd', // error
});
Во всяком случае пока, я так понял вполне вероятно это исправят в обозримом будущем.
https://stackoverflow.com/questions/65878880/types...