2017-10-11 1 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[] 
} 
関連する問題