相关疑难解决方法(0)

如何将JSON对象强制转换为typescript类

我从远程REST服务器读取了一个JSON对象.此JSON对象具有typescript类的所有属性(按设计).如何将收到的JSON对象强制转换为类型var?

我不想填充一个typescript var(即有一个带有这个JSON对象的构造函数).它很大并且通过属性按子对象和属性跨子对象复制所有内容将花费大量时间.

更新:您可以将其转换为打字稿界面!

json typescript

348
推荐指数
14
解决办法
38万
查看次数

无法访问对象属性,即使它存在.返回undefined

这令我困惑.我不知道怎么解释这个,但这是我的调试代码的样子.在它下面,您可以看到这两个日志的输出.第一个清楚地显示了我正在尝试访问的属性的完整JavaScript对象,但下一行代码我无法使用config.col_id_3访问它(请参阅屏幕截图中的"undefined"?).有谁能解释一下?我也可以访问除field_id_4之外的所有其他属性.

console.log(config);
console.log(config.col_id_3);
Run Code Online (Sandbox Code Playgroud)

这就是这些console.log()在Console中打印的内容

控制台输出

javascript console.log

298
推荐指数
12
解决办法
18万
查看次数

如何使用JSON对象初始化TypeScript对象

我从AJAX调用到REST服务器收到一个JSON对象.此对象具有与我的TypeScript类匹配的属性名称(这是此问题的后续内容).

初始化它的最佳方法是什么?我认为不会起作用,因为类(&JSON对象)的成员是对象列表和成员类,而这些类的成员是列表和/或类.

但我更喜欢一种方法,它查找成员名称并将它们分配,创建列表并根据需要实例化类,因此我不必为每个类中的每个成员编写显式代码(有很多!)

json typescript

179
推荐指数
7
解决办法
20万
查看次数

如何在TypeScript中进行运行时类型转换?

目前我正在开发一个打字稿项目,我真的很喜欢TypeScript带来的类型推断.但是 - 当从HTTP调用获取对象时 - 我可以将它们转换为所需类型,获取代码完成并在它们上编译函数编译时间,但这些会导致错误运行时

例:

class Person{
    name: string;

    public giveName() {
        return this.name;
    }

    constructor(json: any) {
        this.name = json.name;
    }
}

var somejson = { 'name' : 'John' }; // Typically from AJAX call
var john = <Person>(somejson);      // The cast

console.log(john.name);       // 'John'
console.log(john.giveName()); // 'undefined is not a function'
Run Code Online (Sandbox Code Playgroud)

虽然这很好地编译 - 并且intellisense建议我使用该函数,但它给出了运行时异常.解决方案可能是:

var somejson = { 'name' : 'Ann' };
var ann = new Person(somejson);

console.log(ann.name);        // 'Ann'
console.log(ann.giveName());  // …
Run Code Online (Sandbox Code Playgroud)

typescript

21
推荐指数
3
解决办法
3万
查看次数

Angular2 HTTP GET - 将响应转换为完整对象

我有这个简单的组件

import {Component} from 'angular2/core';
import {RouterLink, RouteParams} from 'angular2/router';
import {Http, Response, Headers} from 'angular2/http';
import {User} from '../../models/user';
import 'rxjs/add/operator/map';


@Component({
    template: `
        <h1>{{user.name}} {{user.surname}}</h1>
    `,
    directives: [RouterLink],
})
export class UserComponent {

    user: User;

    constructor(private routeParams: RouteParams,
        public http: Http) {
            this.user = new User();
            this.http.get('http://localhost:3000/user/' + this.routeParams.get('id'))
                .map((res: Response) => res.json())
                .subscribe((user: User) => this.user = user);
        console.log(this.user);
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么不subscribe将响应转换为完整User对象.当我记录user变量时,我的控制台说User {_id: undefined, name: undefined, surname: undefined, email: undefined} …

typescript angular

20
推荐指数
2
解决办法
5万
查看次数

Java Map to JSON to Typescript Map

在我的服务器端,我有一个包含HashMap的Java对象.我想将它序列化为JSON,将其返回到我的Angular2客户端并将其用作那里的Map/Dictionary.

这是班级:

public class FileUploadResult {
    String timestamp;
    String message;
    String status;
    HashMap<String, String> parameters;

    public FileUploadResult(String status, String message, String timestamp, HashMap parameters) {
        this.status = status;
        this.message = message;
        this.timestamp = timestamp;
        this.parameters = parameters;
    }
Run Code Online (Sandbox Code Playgroud)

}

这是我在客户端收到的JSON:

{"timestamp":"","message":"Test","status":"1","parameters":{"myKey":"Value","mySecondKey":"Another Value"}}
Run Code Online (Sandbox Code Playgroud)

这是我收到的Angular2 http调用:

this.http.post(this.uploadURL, formData).map((res:Response) => res.json() as FileUploadResult).catch(this.handleError); 
Run Code Online (Sandbox Code Playgroud)

客户端上的FileUploadResult如下所示:

export class FileUploadResult {
    status: string;
    timestamp: string;
    message: string;
    parameters: Map<string, string>;

    constructor() {
        this.parameters = new Map<string, string>();
    }

    addParameter(key: string, value: string) {
        this.parameters.set(key, value);
    } …
Run Code Online (Sandbox Code Playgroud)

json typescript angular

10
推荐指数
1
解决办法
1万
查看次数

打字稿计算的getter不起作用

这个计算属性lastSeenString过去对我有用:

export class User {
    public lastSeen?: Date;
    private _lastSeenString?:string = "";
    get lastSeenString():string {
        return Time.timeSince(this.lastSeen);
    }
}
Run Code Online (Sandbox Code Playgroud)

但现在lastSeenString回来了"".return从不调用getter中的语句.怎么会?lastSeen填充.

客户:

it('Displays the user\'s "last seen"', () => {
    component.user.lastSeen = new Date();
    fixture.detectChanges();
    expect(component.user.lastSeenString).toBe("less than a minute ago");
    expect(page.lastSeen.innerText).toBe("last seen less than a minute ago");
});
Run Code Online (Sandbox Code Playgroud)

我的打字稿编译成es5.为什么getter中的代码没有执行?

应该执行但不执行的时间类:

export class Time {
    public static timeSince(date: Date) {
        let start = +new Date();
        let elapsed = +new Date() …
Run Code Online (Sandbox Code Playgroud)

properties typescript

9
推荐指数
1
解决办法
5184
查看次数

Angular 2 模型函数插值 - self.context.$implicit.X 不是函数

全部,

尝试绑定到模型上的函数时出现错误

我有以下组件、模型和 Html(对于这个例子都是假的)

export class TestModel {    
  public getSomeValue(): string {
     return "Hello World";
  }
}
Run Code Online (Sandbox Code Playgroud)

让我们假设 testModels 属性以某种方式获取它的数据。

@Component(...)
public class MyComponent {    
  public testModels: TestModel[];

  ngOnInit() {
    this.loadData();
  }

  public loadData(): void
  {
     this.http.get("...")
     .map(r=>r.json as TestModel[]) // <--- I think now you've asked the question, I see the problem on this line
     .subscribe(d=>this.testModels = d);

  }
}
Run Code Online (Sandbox Code Playgroud)

现在在我的 html

<div *ngFor="let testModel of testModels">
  <span>{{testModel.getSomeValue()}}</span> <!-- This fails -->
</div>
Run Code Online (Sandbox Code Playgroud)

这是完整的错误:

error_handler.js:48 EXCEPTION: Error in ./MyComponent …

string-interpolation typescript angular2-template angular

5
推荐指数
1
解决办法
3200
查看次数

TypeScript转换json数组

我有JSON数组如下:

   var json = [{
            id: 1,
            login: "Mieszko",
            name: "Misztal",
            surname: "Adminek",
            phone: "0413414",
            role: 2
            },
            {
                id: 2,
                login: "Rafal",
                name: "Robak",
                surname: "Kierowczek",
                phone: "5145145",
                role: 1
            }
        ];
Run Code Online (Sandbox Code Playgroud)

我还创建了User类,如下所示:

export class User extends BaseModel {
    id: number;
    login: string;
    name: string;
    surname: string;
    phone: string;
    roles: Roles;
    admin: boolean;
    driver: boolean;

isDriver(): boolean {
        return this.roles === 1;
    }
//other methods

}
Run Code Online (Sandbox Code Playgroud)

我的计划是将命令JSON数组转换为User数组.在JSON内部,我获得了整数角色.我班上有管理员和驱动程序布尔字段.这在复选框的ngModel中是必需的.

现在问题出在这一行之后

var users: Array<User> = JSON.parse(JSON.stringify(json));
Run Code Online (Sandbox Code Playgroud)

我无法从User类调用方法,例如users[0].isDriver()因为编译器无法识别isDriver()方法.

有谁知道如何解决这个问题?

typescript

3
推荐指数
1
解决办法
1万
查看次数