Я нашел ответ, который подходит для моего варианта использования, но не является многоразовым. В любом случае, просто делюсь им.
Процесс мышления
Я считаю, что невозможно иметь один тип solid для представления того, что я хотел, потому что я даже не могу думать, что будет в VS Code, если Я намекаю на это!
Однако, насколько мне известно, в Typescript есть проверка стиля функции для типов, в которых можно передать тип и ожидать тип назад, и, наконец, присвоить ему значение, чтобы увидеть если он пройдет.
Проверка типов с использованием Generi c Type и последующее назначение
Используя эту технику, я думаю о следующем типе шаблона:
type TrueStringLiterals<T extends string> = string extends T ? never : true;
const v1 = "hi";
const check1: TrueStringLiterals<typeof v1> = true; // No error :-)
const v2 = "bye";
const check2: TrueStringLiterals<typeof v2> = true; // No error :-)
const v3 = ("red" as string);
const check3: TrueStringLiterals<typeof v3> = true; // Errors, as expected!
Playground Link
Проще в уже пройденном Generi c Тип
Кроме того, в моем случае я делаю:
abstract class MyAbstractClass<
BRAND_T extends (string extends BRAND_T ? never : string),
VALUE_T = string
> {
...
Playground Link
... которая работает как шарм!