以下のようなコードがあるとして、省略可能なプロパティ kind
を in
で存在することを確認しているから、Set<string>
に加えることはできると思うのですが、deno test
や deno run
では 'string | undefined'
と判断されてしまいます。
これは私の書き方がおかしいのでしょうか。それとも Deno がおかしいと思われますか?
typescript
1type Entry = { 2 pattern: string; 3 kind?: string; 4}; 5function foo(entry: Entry){ 6 const set: Set<string> = new Set(); 7 if ("kind" in entry){ 8 set.add(entry.kind); // Argument of type 'string | undefined' is not assignable to parameter of type 'string'. 9 } 10 return set; 11}
また、別の例では関数 bar()
の isBaz()
までで target
はプロパティ baz
を持ち、その型は Baz と確認しているのですが、
Property 'baz' does not exist on type 'object'.
というエラーが出ます。
どう書くのが望ましいでしょうか?
typescript
1type Baz = { [abbr: string]: string }; 2function isBaz(target: any): target is Baz { 3 return typeof target == "object" && 4 Object.values(target).every((value) => typeof value == "string"); 5} 6 7function bar(target: unknown) { 8 if ( !(target != null && typeof target == "object" && "baz" in target && isBaz(target.baz)) ) { 9 throw new Error() 10 } 11 useBaz(target.baz) 12} 13 14function useBaz(baz: Baz) { 15}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。