Какой самый умный способ конвертировать:
export interface A {
Id: number;
Name: string;
Surname: string;
Age: number;
}
export interface B { //<---EDITED (at first i wrote "A"- sorry guys
Id: number;
Name: string;
Surname: string;
City: string;
}
let source :A = {
Id = 1
Name = "aaaa"
Suramne = "bbbb"
Age = 99
}
к:
{
Id = 1
Name = "aaaa"
Suramne = "bbbb"
City = ""
}
разновидность подавленный, отображающая только существующие свойства (с тем же именем) и теряющая остальные, отсутствующие в целевом объекте.
Предоставьте минимальный воспроизводимый пример, который четко демонстрирует проблему, с которой вы столкнулись. В идеале кто-то может вставить код в автономную IDE, такую как Площадка TypeScript (ссылка здесь!), и сразу же приступить к решению проблемы, не создавая ее заново. Таким образом, не должно быть псевдокода, опечаток, несвязанных ошибок или необъявленных типов или значений.
если у вас есть два интерфейса с именем A
в одном файле, то у вас есть слияние объявлений (это означает, что в вашей переменной отсутствует свойство). Если они находятся в разных файлах, у вас может быть только один файл с таким именем. Нет автоматизированного инструмента для правильного приведения несвязанных типов, вам нужно написать собственную функцию преобразования.
@apokryfos, насколько нам известно, это просто опечатка, и на самом деле это два разных интерфейса? В любом случае, Алекс, вы бы сделали это так же, как в JavaScript, самостоятельно манипулируя объектом. Возможный дубликат stackoverflow.com/questions/31829951/…
извините, ребята, я исправил фрагмент, очевидно, это два разных интерфейса
interface A {
Id: number;
Name: string;
Surname: string;
Age: number;
}
interface B {
Id: number;
Name: string;
Surname: string;
City: string;
}
let source : A = {
Id: 1,
Name: "aaaa",
Surname: "bbbb",
Age: 99
}
let transformed = source as unknown as B;
console.info(transformed.Id) //1
console.info(transformed.Name) //"aaaa"
console.info(transformed.Surname) //"bbbb"
console.info(transformed.City) //undefined
Это никоим образом не является безопасным типом. Возможно, лучше создать метод, который отображает его из одного типа в другой, таким образом, вы можете обеспечить безопасность типов все время.
let TransformAToB = (input: A): B => {
return {
Id: input.Id,
Name: input.Name,
Surname: input.Surname,
City: ""
}
}
let transformed2 = TransformAToB(source)
console.info(transformed.Id) //1
console.info(transformed.Name) //"aaaa"
console.info(transformed.Surname) //"bbbb"
console.info(transformed.City) //""
let transformed = source as unknown as B;
это тот быстрый и грязный трюк, который я искал! спасибо
Как типы, значения или и то, и другое? Похоже, что в предоставленных фрагментах кода также присутствует неверный синтаксис.