Разрешить интерфейсу неявно преобразовывать в JsonData - PullRequest
1 голос
/ 03 августа 2020

Могу ли я изменить это определение типа данных Json, чтобы разрешить json -совместимые типы для неявного преобразования в него?

type JsonValue =
    | string
    | number
    | boolean
    | null
    | { [property: string]: JsonValue }
    | JsonValue[];

У меня есть тип, как показано ниже :

interface AttachedFile {
  id: string
  name: string
  size: number
  type: string
}

И я хочу, чтобы задание работало:

const q : JsonValue = someAttachedFile

Но получаю ошибку Type 'AttachedFile' is not assignable to type '{ [property: string]: JsonValue; }'. Index signature is missing in type 'AttachedFile'.

1 Ответ

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

JsonValue не JSON

type JsonValue =
    | string
    | number
    | boolean
    | null
    | { [property: string]: Json }
    | Json[];

interface JSON {
    readonly [Symbol.toStringTag]: string;
}

Ваш тип javascript объект

interface AttachedFile {
  id: string
  name: string
  size: number
  type: string
}

Чтобы сделать json, вам нужно позвонить,

const q = JSON.stringify(someAttachedFile)

Что приведет к String!

"{                       // now this is JsonValue
  id: "some id" // <------------------||||
  name: "some name" // <---------------|||
  size: 1 // <--------------------------||
  type: "some type" // <-----------------|
}"

Итак, JsonValue никогда не используется разработчиком, он используется кодом Visual Studio для помощи в работе с JSON файлы (например, когда вы require('data.json'))

И машинописный текст do c использует JsonValue для демонстрации рекурсивных типов, что легко понять с помощью JSON

Все, что вы можете сделать, это для преобразования объекта json в ваш AttachedFile

const q: AttachedFile = JSON.parse(someJsonString) // convert json string to AttachedFile
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...