Объявление пользовательского типа для логического аргумента

#typescript

#typescript

Вопрос:

преамбула: в настоящее время я работаю над созданием определений типов для существующей библиотеки js;

Код, с которым я сейчас работаю, использует ТОННУ подходов, подобных этому:

 class SomeClass {
  someMethod(product, label) {
    const productName = product.ownName || product.title || product;
    const labelId = labelIdNumber || label
  // do some stuff here
  }
}

 

Это отлично работает для библиотек, поскольку можно напрямую передавать некоторый объект или значение (например, строку).

Однако мне трудно понять, как правильно использовать дженерики в этом случае. Я пытаюсь что-то вроде:

 interface SomeClass {
  someMethod<T>(product: T, label: T): void
}

 

В будущем у меня будут интерфейсы для описания обоих product , label но пока я ищу какой-то общий подход.

Я вижу здесь по крайней мере одну проблему:

 const invalidArg = 123
SomeClass.someMethod(invalidArg); // No TS error because args type is generic (<T>)
 

Итак, мой вопрос в том, как создать a Type , в котором будет указано, что аргумент равен Object или a string ?

В принципе, мне нужен тип, который будет делать это

 interface SomeClass {
  someMethod(product: Object | string, label: : Object | string): void
}
 

Почему? Потому что этот подход с Object || string используется во всей библиотеке, и я хотел бы иметь какой-то уникальный тип для этого, а не писать Object | string 100 раз

Комментарии:

1. вы можете сделать export type ObjectOrString = Object | string это в одном из ваших d.ts файлов. и затем product: ObjectOrString