Преобразование типов с использованием интерфейса TypeScript - PullRequest
0 голосов
/ 23 февраля 2020

Это довольно странный вопрос, но я работаю над массивной формой, содержащей примерно ~ 100 полей ввода. Мы передаем все эти данные в конечную точку GraphQL. Мы используем TypeScript, и я определил интерфейсы на основе схемы.

Я хочу знать, могу ли я использовать типы интерфейса TypeScript, чтобы указать c тип логический, для автоматического преобразования определенных значений свойств на true или false, поскольку они поступают из формы в виде строк "1" или "0", или "true" (флажки)? Затем я мог бы создать что-то вроде фильтра / конвертера для автоматического преобразования определенных типов ввода для запросов GraphQL, когда я смогу обнаружить это из интерфейса. Было предложение сделать что-то подобное здесь, в StackOverflow:

interface I1 {
    x: boolean; 
}

let myVar: I1['x'];

Но вы не можете использовать myVar, как он определен. Я хотел бы получить typeof I1.x, чтобы я мог вернуть 'логическое', а затем выполнить преобразование для некоторых полей, таких как !!(obj.x) et c.

Так что я могу go об этом или сделать Мне действительно нужно сгенерировать массивное дерево объектов, преобразующее или определяющее определенные ключи c, опять же (дублирование), чтобы они были логическими? Или мы должны подумать об использовании логических значений с GraphQ?

1 Ответ

0 голосов
/ 24 февраля 2020

Я не знаю, как выполнить преобразование, используя только интерфейсы, но не могли бы вы реализовать интерфейс в классе для достижения аналогичного результата? Что-то вроде:

interface IOne {
    x : boolean
}

class One implements IOne {
    constructor(b_val?: boolean, b_str?: string) {
        if (b_val): this.x = b_val
        if (b_str) {
            if (b_str == 'true')
                this.x = true
            else
                this.x = false
        }
    }
}

Затем вы обрабатываете ввод с помощью new One(true, undefined) или new One(undefined, 'true'), et c. чтобы выполнить преобразование для различных типов ввода, и вы можете передать полученный объект напрямую во все, что может использовать интерфейс IOne.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...