как установить допустимый тип с помощью типа Dynami c в машинописном тексте - PullRequest
0 голосов
/ 07 августа 2020

Я использую машинописный текст.

И мне нужно обрабатывать динамические c типы.

Как обрабатывать этот тип?

[пример]

type A  = {
    name: string;
    age: number;
}

type B = {
    name: string;
    address: string;
}

type C = {
    name: string;
    phoneNumber: string;
}

type Origin = 'A' | 'B' | 'C';

type T  = {
    origin: Origin;
    A: A;
    B: B;
    C: C
}

    const a: A = {
        name: 'Aname',
        age: 1
    }

    const b: B = {
        name: "Bname",
        address: "Baddress"
    }

    const c: C = {
        name: "Cname",
        phoneNumber: "010-0000-0000"
    }


const F = (): Origin => {
    const c = ['A', 'B', 'C'] as const;
    return c[Math.floor(Math.random() * 3)]
}

const FF = (): A | B | C => {

    const arr = [a,b,c] as const;
    return arr[Math.floor(Math.random() * 3)]
}

const o: T = {};



const someData: Origin = F();

const data: ReturnType<typeof FF> = FF();

o[someData] = data; // Error Occured


У меня есть значение Dynami c из ввода клиента.

Итак, я не знаю, какое значение приходит.

Как это сделать ..?

[Я сделал]

...

if(someData === 'A') {
    o[someData] = data as A;
}


if(someData === 'B') {
    o[someData] = data as B;
}

if(someData === 'C') {
    o[someData] = data as C;
}

Но, Это неэффективно.

«Условное, если» использовалось из-за определения типа.

Хотя входящее значение фиксировано, это не похоже на хороший способ использования условных операторов.

Спасибо!

это машинописная площадка

1 Ответ

0 голосов
/ 07 августа 2020

Вы можете попробовать это.

Сделайте age, address и phoneNumber необязательными.

const a: A = {
  name: 'Aname',
  age?: 1
};

const b: B = {
  name: "Bname",
  address?: "Baddress"
};

const c: C = {
  name: "Cname",
  phoneNumber?: "010-0000-0000"
};

И обновите эту строку

const o: T = {};

на

const o = {} as T;
...