打字稿属性'长度'类型

时间:2016-09-29 20:48:58

标签: 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());
}

2 个答案:

答案 0 :(得分:3)

willMove(toSuperview:)的类型似乎有误。虽然方法名称,方法类型和文件名都表明返回的promise只用一个引号来实现,但是你的组件正在使用它,就像它返回一个引号数组一样。你会想要使用

getQuoteOfTheDay(): Promise<Quote>

答案 1 :(得分:-2)

尝试使用引号[]。长度,因为它似乎是一个数组。