在打字稿中将嵌套对象模型作为请求参数传递

Pass nested object model as request paramters in typescript

我正在尝试使用打字稿中的模型结构传递请求参数。如果对象没有嵌套,我可以做。但如果对象是嵌套数组,如下所示,我无法分配值并作为请求参数传递。 如果有人有任何建议,请告诉我。 提前致谢!

export class exampleModel{

    products: [
        {
            name: string,
            address:string,
            product_sizes: [
                {
                    quntity: number,
                    price: number,
                    id: [
                        number
                    ]
                }
            ]
        }
    ]

} 

创建这样的模型后,我正在初始化模型如下

  productRequestObject : exampleModel = <exampleModel>{}

然后尝试为其赋值

    this.productRequestObject.products[0].name = sessionStorage.getItem('name')

这里我得到的错误是 Cannot read property '0' of undefined

如果我遗漏了什么,请告诉我!

您初始化了一个空对象。尽管您知道该结构,但它目前没有字段 projects。一种正确的方法是预定义接口和模型。然后根据它们的嵌套结构实例化并 assemble 它们就像拼图一样。

interfaces.ts

中定义您的接口
export interface IProductSize {
    quantity: number;
    price: number;
    id: Array<number>;
}

export interface IProduct {
    name: string;
    address:string;
    product_sizes: Array<IProductSize>;
}

export interface IRequest {
    products: Array<IProduct>;
}

export interface IExampleModel {
    requests: Array<IRequest>;
}

有了这个,在models.ts

中定义你的类
export class ProductSize implements IProductSize {
    constructor(
        public quantity: number,
        public price: number,
        public id: Array<number>){}
}

export class Product implements IProduct {
    constructor(
        public name: string,
        public address:string,
        public product_sizes: Array<IProductSize>){}
}

export class Request implements IRequest {
    constructor(public products: Array<IProduct>){}
}

export class ExampleModel implements IExampleModel {
    constructor(public requests: Array<IRequest>){}
}

现在你可以继续assemble你的对象了。

let productSize: IProductSize = new ProductSize(0, 0, []);
let product: IProduct = new Product('', '', [productSize]);
let request: IRequest = new Request([product]);
let productRequestObject: IExampleModel = new ExampleModel([request]);

终于可以访问该字段了

 this.productRequestObject.products[0].name = sessionStorage.getItem('name');

在 Angular 中,您应该这样做。这样您就非常灵活,并且可以完全控制嵌套构造的每个级别。