angular - Typescript 属性 'length' 在类型上不存在

标签 angular typescript

我是 Typescript 的新手,一直在尝试让以下代码片段正常工作:

quoteService.getQuoteOfTheDay()
        .then(quotes => this.quote = quotes[Math.floor(Math.random() * quotes.length)]);

想法是从数组中随机选择一个引号。

相反,我在终端 Property 'length' does not exist on type 'Quote' 中收到以下错误。

如果我将 quotes.length 更改为 4 代码段有效,但我希望该函数计算出有多少引号,然后随机返回一个。

下面是整个组件。

import { Component } from '@angular/core';
import { MaterialModule } from '@angular/material';
import { Http } from '@angular/http';

import { Quote } from './quote.model';
import { QuoteService } from './quote.service';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css'],
  providers: [QuoteService]
})

export class AppComponent {

    title = 'App is running!';
    quote: Quote;

    constructor(quoteService: QuoteService) {

      quoteService.getQuoteOfTheDay()
        .then(quotes => this.quote = quotes[Math.floor(Math.random() * quotes.length)]);

    }
}

quote.service.ts 是错误的

getQuoteOfTheDay(): Promise<Quote> {
    return this.http.get('quote.json').toPromise()
        .then(response => response.json());
}

本来应该是这样的

getQuoteOfTheDay(): Promise<any> {
    return this.http.get('quote.json').toPromise()
        .then(response => response.json());
}

最佳答案

您的类型 getQuoteOfTheDay(): Promise<Quote>似乎是错误的。虽然方法名称、方法类型和文件名都表明返回的 promise 将只用一个单引号实现,但您的组件正在使用它,就好像它返回了一个引号数组一样。你会想要使用

getQuotesOfTheDay(): Promise<[Quote]> {
//      ^                    ^     ^
    return this.http.get('quotes.json').toPromise()
//                             ^
        .then(response => response.json());
}

关于angular - Typescript 属性 'length' 在类型上不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39779750/

相关文章:

angular - ngx-datatable - 带有操作按钮的自定义列

angular - 尝试使用 Firebase admin SDK 时出错

html - Angular Material 选项卡未突出显示

typescript - 如何匹配 typescript 中的嵌套键

xml - 如何在 ion-list angular 2 ionic 2 中显示已解析的 xml 提要数据

arrays - Angular2 *ngFor : "Cannot read property ' 0' of undefined"

angular - 在没有回调参数的情况下调用订阅时,RXJS do 运算符不会在流中被命中

css - AGM map 打印显示打印输出中存在间隙

json - 如何创建简单的 Typescript 元数据注释

java - 如何集成 Angular 2 + Java Maven Web 应用程序