2017-10-11 43 views
0

我有以下错误:类'ListItemFactory'错误地实现了接口'IFactory'。的特性“getItems”类型不兼容

[ts] Class 'ListItemFactory' incorrectly implements interface 'IFactory'. Types of property 'getItems' are incompatible. Type '(requester: SPHttpClient, siteUrl: string, listName: string) => IListItem[]' is not assignable to type '() => IListItem[]'

我想实现一个简单的工厂方法设计模式,相关的代码是这样的:

export interface IListItem { 
    [key: string]: any; 
    id: string; 
    title: string; 
    modified: Date; 
    created: Date; 
    modifiedby: string; 
    createdby: string;  
} 

import {IListItem} from './IListItem'; 

export interface IDirectoryListItem extends IListItem { 
     firstName: string; 
     lastName: string; 
     mobileNumber: string; 
     internalNumber: string; 
} 

import {IListItem} from './IListItem'; 

export interface IAnnouncementListItem extends IListItem { 
    announcementBody: string; 
    expiryDate: Date; 
} 


import {IListItem} from './IListItem'; 

export interface INewsListItem extends IListItem { 
    newsheader: string; 
    newsbody: string; 
    expiryDate: Date; 
} 

import { IListItem } from './models/IListItem'; 

export interface IFactory{ 
    getItems(): IListItem[] 
} 

import { SPHttpClient, SPHttpClientResponse } from '@microsoft/sp-http'; 
import { IWebPartContext } from '@microsoft/sp-webpart-base'; 
import { IListItem} from './models/IListItem'; 
import { IFactory } from './IFactory'; 
import { INewsListItem } from './models/INewsListItem'; 
import { IDirectoryListItem } from './models/IDirectoryListItem'; 
import { IAnnouncementListItem } from './models/IAnnouncementListItem'; 

export class ListItemFactory implements IFactory{ 
    getItems(requester: SPHttpClient, siteUrl: string, listName: string): IListItem[] { 
     switch(listName) { 
      case 'List': 
       let items: IListItem[]; 
       requester.get(`${siteUrl}/_api/web/lists/getbytitle('${listName}')/items?$select=Title,Id`, 
       SPHttpClient.configurations.v1, 
       { 
        headers: { 
        'Accept': 'application/json;odata=nometadata', 
        'odata-version': '' 
        } 
       }) 
       .then((response: SPHttpClientResponse): Promise<{ value: IListItem[] }> => { 
        return response.json(); 
       }) 
       .then((response: { value: IListItem[] }): void => { 
        items= response.value; 
       }); 
       return items; 
      case 'News': 
       let newsitems: INewsListItem[]; 
       requester.get(`${siteUrl}/_api/web/lists/getbytitle('${listName}')/items?$select=Title,Id`, 
       SPHttpClient.configurations.v1, 
       { 
        headers: { 
        'Accept': 'application/json;odata=nometadata', 
        'odata-version': '' 
        } 
       }) 
       .then((response: SPHttpClientResponse): Promise<{ value: INewsListItem[] }> => { 
        return response.json(); 
       }) 
       .then((response: { value: INewsListItem[] }): void => { 
        newsitems= response.value; 
       }); 
       return newsitems; 
      case 'Announcements': 
       let announcementitems: IAnnouncementListItem[]; 
       requester.get(`${siteUrl}/_api/web/lists/getbytitle('${listName}')/items?$select=Title,Id`, 
       SPHttpClient.configurations.v1, 
       { 
        headers: { 
        'Accept': 'application/json;odata=nometadata', 
        'odata-version': '' 
        } 
       }) 
       .then((response: SPHttpClientResponse): Promise<{ value: IAnnouncementListItem[] }> => { 
        return response.json(); 
       }) 
       .then((response: { value: IAnnouncementListItem[] }): void => { 
        announcementitems= response.value; 
       }); 
       return announcementitems; 
      case 'Directory': 
       let directoryitems: IDirectoryListItem[]; 
       requester.get(`${siteUrl}/_api/web/lists/getbytitle('${listName}')/items?$select=Title,Id`, 
       SPHttpClient.configurations.v1, 
       { 
        headers: { 
        'Accept': 'application/json;odata=nometadata', 
        'odata-version': '' 
        } 
       }) 
       .then((response: SPHttpClientResponse): Promise<{ value: IDirectoryListItem[] }> => { 
        return response.json(); 
       }) 
       .then((response: { value: IDirectoryListItem[] }): void => { 
        items= response.value; 
       }); 
       return directoryitems; 
      default: 
       return null; 
     } 
     } 
} 

错误在最后一个类ListItemFactory中,但不知道为什么

回答

1

在你的IFactory接口getItems的签名是:getItems(): IListItem[],但在你的实现中,签名是getItems(requester: SPHttpClient, siteUrl: string, listName: string): IListItem[],由于实施中的额外参数,因此不匹配。更改IFactory接口包括这些参数:

export interface IFactory { 
    getItems(requester: string, siteUrl: string, listName: string): IListItem[] 
} 
+0

谢谢,错过了。 –

0

getItem签名不匹配。尝试

export interface IFactory{ 
    getItems(requester: SPHttpClient, siteUrl: string, listName: string): IListItem[] 
}