以下のSymbolメソッドの部分で方のエラーが出てしまいます
どのように修正するのがいいでしょうか?
たしかに//typescript/lib/lib.es2015.iterable.d.ts内のイタレーターの型を確認しても
Symbol.iteratorやnextメソッドの内容に互換性がないということにはならないのでは?と思っています。
特にわからないのは以下の、エラーメッセージの最後の部分です。このメッセージが出てくる原因は何でしょうか?
「プロパティ 'done' の型に互換性がありません。
型 'boolean' を型 'true' に割り当てることはできません。」
TypeScript
1class Users implements Iterable<object[]> { 2 Users: object[] 3 constructor(users: object[]) { 4 this.Users = users 5 } 6 [Symbol.iterator]() { // Error 7 let i = 0 8 let users = this.Users 9 return { 10 next() { 11 if (i < users.length) { 12 return { done: false, value: users[i++] } 13 } 14 return { done: true } 15 }, 16 } 17 } 18} 19 20const allUsers = new Users([ 21 { name: 'Tanaka' }, 22 { name: 'Suzuki' }, 23 { name: 'Yamada' }, 24]) 25 26for (const u of allUsers) { 27 console.log(u.name) 28} 29
Error
1型 'Users' のプロパティ '[Symbol.iterator]' を基本データ型 'Iterable<object[]>' の同じプロパティに割り当てることはできません。 2 型 '() => { next(): { done: boolean; value: object; } | { done: boolean; value?: undefined; }; }' を型 '() => Iterator<object[], any, undefined>' に割り当てることはできません。 3 型 '{ next(): { done: boolean; value: object; } | { done: boolean; value?: undefined; }; }' を型 'Iterator<object[], any, undefined>' に割り当てることはできません。 4 プロパティ 'next' の型に互換性がありません。 5 型 '() => { done: boolean; value: object; } | { done: boolean; value?: undefined; }' を型 '(...args: [] | [undefined]) => IteratorResult<object[], any>' に割り当てることはできません。 6 型 '{ done: boolean; value: object; } | { done: boolean; value?: undefined; }' を型 'IteratorResult<object[], any>' に割り当てることはできません。 7 型 '{ done: boolean; value: object; }' を型 'IteratorResult<object[], any>' に割り当てることはできません。 8 型 '{ done: boolean; value: object; }' を型 'IteratorReturnResult<any>' に割り当てることはできません。 9 プロパティ 'done' の型に互換性がありません。 10 型 'boolean' を型 'true' に割り当てることはできません。ts(2416)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/25 01:22 編集
2019/11/25 03:01