angular2 meteor ionic - 不能将命名空间 Observable 用作类型
angular2 meteor ionic - cannot use namespace Observable as a type
我正在关注 this tutorial 尽我最大的努力不去恨 angular。本教程使用 Typescript、Angular2 和 Ionic,这 3 个我并不完全理解的工具,但这就像……为什么我首先要编写一个教程。我在 Web 开发方面的经验是使用 Django 2.0 和很多前端,所以我非常了解 Javascript,但这让我感到困惑。
这是相关代码:
// chats.ts
import { Component } from '@angular/core';
import * as Moment from 'moment';
import { Observable } from 'rxjs/Observable';
import { Chat, MessageType } from '../../../../imports/models';
import template from './chats.html';
@Component({
template
});
export class ChatsPage {
chats: Observable<Chat[]>;
constructor() {
this.chats = this.findChats();
}
private findChats(): Observable<Chat[]> {
return Observable.of([
{
_id: '0',
title: 'Ethan Gonzalez',
picture: 'https://randomuser.me/api/portraits/thumb/men/1.jpg',
lastMessage: {
content: 'You on your way?',
createdAt: Moment().subtract(1, 'hours').toDate(),
type: MessageType.TEXT
}
},
// dummy data here
第二个文件:
// app.components.ts
import { Component } from '@angular/core';
import { Platform } from 'ionic-angular';
import { StatusBar, Splashscreen } from 'ionic-native';
import { ChatsPage } from '../pages/chats/chats';
import template from "./app.html";
@Component({
template
});
export class MyApp {
rootPage = ChatsPage;
constructor(platform: Platform) {
platform.ready().then(() => {
if (platform.is('cordova')) {
StatusBar.styleDefault();
Splashscreen.hide();
}
});
}
}
当我 运行 Meteor 时,我得到这些错误:
client/imports/pages/chats/chats.ts (13, 12): Cannot use namespace 'Observable' as a type.
client/imports/pages/chats/chats.ts (19, 26): Cannot use namespace 'Observable' as a type.
client/imports/app/app.components.ts (14, 27): Cannot use namespace 'Platform' as a type.
FWIW 在这一点上:当我没有安装 node_modules
时,我可以重现原始错误。即使在我安装它们之后,看起来 barbatus:typescript 构建插件有问题并且不会使其缓存无效,所以它仍然显示原始错误。如果我删除 .meteor/local/.typescript-cache
,则识别安装的 node_modules
。总的来说,我不信任 barbatus:typescript(它试图变得聪明并且做了太多复杂的事情,最终导致问题),但我目前没有可以推荐用于一般用途的替代方案。如果愿意,您可以 file an issue 看看 barbatus 是否会解决这个特定问题。
Cannot use namespace ... as a type
错误似乎是您的 declarations.d.ts
文件执行 declare module '*';
的结果。这个错误对我来说没有意义,所以我提交了 a TypeScript issue.
这对我有用。
import { Observable } from 'rxjs'
而不是
import { Observable } from 'rxjs/Observable'
我正在关注 this tutorial 尽我最大的努力不去恨 angular。本教程使用 Typescript、Angular2 和 Ionic,这 3 个我并不完全理解的工具,但这就像……为什么我首先要编写一个教程。我在 Web 开发方面的经验是使用 Django 2.0 和很多前端,所以我非常了解 Javascript,但这让我感到困惑。
这是相关代码:
// chats.ts
import { Component } from '@angular/core';
import * as Moment from 'moment';
import { Observable } from 'rxjs/Observable';
import { Chat, MessageType } from '../../../../imports/models';
import template from './chats.html';
@Component({
template
});
export class ChatsPage {
chats: Observable<Chat[]>;
constructor() {
this.chats = this.findChats();
}
private findChats(): Observable<Chat[]> {
return Observable.of([
{
_id: '0',
title: 'Ethan Gonzalez',
picture: 'https://randomuser.me/api/portraits/thumb/men/1.jpg',
lastMessage: {
content: 'You on your way?',
createdAt: Moment().subtract(1, 'hours').toDate(),
type: MessageType.TEXT
}
},
// dummy data here
第二个文件:
// app.components.ts
import { Component } from '@angular/core';
import { Platform } from 'ionic-angular';
import { StatusBar, Splashscreen } from 'ionic-native';
import { ChatsPage } from '../pages/chats/chats';
import template from "./app.html";
@Component({
template
});
export class MyApp {
rootPage = ChatsPage;
constructor(platform: Platform) {
platform.ready().then(() => {
if (platform.is('cordova')) {
StatusBar.styleDefault();
Splashscreen.hide();
}
});
}
}
当我 运行 Meteor 时,我得到这些错误:
client/imports/pages/chats/chats.ts (13, 12): Cannot use namespace 'Observable' as a type.
client/imports/pages/chats/chats.ts (19, 26): Cannot use namespace 'Observable' as a type.
client/imports/app/app.components.ts (14, 27): Cannot use namespace 'Platform' as a type.
FWIW 在这一点上:当我没有安装 node_modules
时,我可以重现原始错误。即使在我安装它们之后,看起来 barbatus:typescript 构建插件有问题并且不会使其缓存无效,所以它仍然显示原始错误。如果我删除 .meteor/local/.typescript-cache
,则识别安装的 node_modules
。总的来说,我不信任 barbatus:typescript(它试图变得聪明并且做了太多复杂的事情,最终导致问题),但我目前没有可以推荐用于一般用途的替代方案。如果愿意,您可以 file an issue 看看 barbatus 是否会解决这个特定问题。
Cannot use namespace ... as a type
错误似乎是您的 declarations.d.ts
文件执行 declare module '*';
的结果。这个错误对我来说没有意义,所以我提交了 a TypeScript issue.
这对我有用。
import { Observable } from 'rxjs'
而不是
import { Observable } from 'rxjs/Observable'