打字稿错误:类型'对象'çš„å‚æ•°ä¸èƒ½åˆ†é…给' {} []'类型的å‚æ•°

时间:2018-01-03 21:08:44

标签: javascript angular typescript

我使用Angular Material table component就是这样:

    this.userService.getUsers().subscribe((response) => {
        this.users = new MatTableDataSource(response);
    });

它有效,但在编译时会抛出以下打字稿错误:

  

类型'对象'的争论ä¸èƒ½åˆ†é…给类型的å‚æ•°   ' {} []&#39 ;. '对象' typeå¯ä»¥åˆ†é…ç»™å¾ˆå°‘çš„å…¶ä»–ç±»åž‹ã€‚éš¾é“ Â Â ä½ çš„æ„æ€æ˜¯ä½¿ç”¨ï¼†ï¼ƒ39; any'而ä¸æ˜¯ï¼Ÿè´¢äº§åŒ…括'ä¸è§äº†   在类型'对象'。

所以我å°è¯•å°†å…¶æ›´æ”¹ä¸ºï¼š

this.users = new MatTableDataSource<any>(response);

但ä»ç„¶æ˜¯åŒæ ·çš„错误。 response看起æ¥åƒè¿™æ ·ï¼š

[{
    userId: 123,
    username: 'Tom'
}, {
    userId: 456,
    username: 'Joe'
}]

知é“如何摆脱错误å—?

修改

如果我这样åšï¼Œåº”该æåŠï¼š

this.users = new MatTableDataSource([response]);

错误消失但表格ä¸èµ·ä½œç”¨ï¼Œå› ä¸ºæ ¼å¼ä¸æ˜¯è¡¨æ ¼é¢„期的正确格å¼ã€‚åªæ˜¯æ³¨æ„到这一点,以防它å¯èƒ½æ˜¯ä»€ä¹ˆåŽŸå› ...

2 个答案:

答案 0 :(得分:4)

  

“对象â€ç±»åž‹çš„å‚æ•°ä¸èƒ½åˆ†é…给“{} []â€ç±»åž‹çš„å‚数。

这并ä¸æ„味ç€MatTableDataSource接å—错误的å‚数,而是表示您的response类型错误。你应该明确地指出:

  (response: {userId: number, username: string }[]) =>

或在传递时这样åšï¼š

 new MatTableDataSource(response as {userId: number, username: string }[])

答案 1 :(得分:0)

您的subscribe()函数需è¦ä¼ é€’any:

在您的情况下(如注释中所述):

this.users = new MatTableDataSource(<any> response);

在æŸäº›æƒ…况下,å¯èƒ½æ˜¯è¿™æ ·çš„:

const myLocalData = this.getData(<any> response);