#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