質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.44%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

解決済

2回答

248閲覧

TypeScriptで一部要素を削除したい

natural2

総合スコア12

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

2クリップ

投稿2024/04/20 08:58

編集2024/04/20 16:58

実現したいこと

オブジェクトの一部を除外(削除)したいです

前提

userオブジェクトから以下のようにidだけ削除した、新しいオブジェクトを作成したいです

{ "name": "tanaka", "age": 20 }

該当のソースコード

https://www.typescriptlang.org/play?#code/C4TwDgpgBAqgzhATlAvFA3gKClAlgEwH4AuKAOwFcBbAIyW3IEMqJS5hFcyBzBx71uWp1EmAL6ZMAYwD2ZdlAoJEpeElQYGBUgEYANAzLNBAImCMjAa0YmDOfoIBMABnGTZ8mQBsIAOi8y3AAUSkgAlNJycN5+AcEAUgDKAPIAcr7snDy4AGYgIcphEZHywIrKyVS4wKSV1QA8aoh6UCYEJgB8GqGiHtE+-oEFSHXAEX0xgwkp6Zlc3Ln5PaNF7lFlPQCiAB5SXhT4gjt7BxCNyi1t+J3dyiX9sUNbu-uH41GTcUFJaRkc84thohjq8IEUgA

TypeScript

1type User = { 2 id: number 3 name: string 4 age: number 5} 6 7const user: User = { 8 id: 1, 9 name: "tanaka", 10 age: 20 11} 12 13console.log(user) 14// 一応JSONにシリアライズした結果も確認してみる 15// console.log(JSON.stringify(user)) 16 17const userOmit: Omit<User, "id"> = user 18 19console.log(userOmit) 20// 一応JSONにシリアライズした結果も確認してみる 21// console.log(JSON.stringify(userOmit))

発生している問題・エラーメッセージ

2回目のconsole.logは id が消えていて欲しい。
しかし、idが出ている。

// 1回目の console.log の結果 { "id": 1, "name": "tanaka", "age": 20 } // 2回目の console.log の結果 { "id": 1, "name": "tanaka", "age": 20 }

試したこと

  • Omit を利用したプログラムを書いたが期待する結果を得られなかった

  • Exclude を利用したプログラムを書いたが期待する結果を得られなかった

TypeScript

1const userExclude: Exclude<User, "id"> = user 2console.log(userExclude)
  • 今回のケースであればidが消えなくてもundefinedでも良いので以下のようにも書けます。

でも、OmitやExcludeの存在意義がよくわからなくなってきました。
私のOmitやExcludeの使い方が間違っていますか?
できればOmitやExcludeのように簡潔に書けたほうが好みです。
変に関数などを作らずにできる限りTypeScript標準の機能を使って実装できたほうが良いと思っています。誰が見てもOmitやExcludeは要素を削除していると分かるからです。

TypeScript

1console.log({...user, id: undefined})

補足情報(FW/ツールのバージョンなど)

  • TypeScript 5.4

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

TypeScriptの機能は利用せずにライブラリを利用している形でも良いかと思いました。
lodashのomitを利用する形が良いと思いました。

TypeScript

1var object = { 'a': 1, 'b': '2', 'c': 3 }; 2 3_.omit(object, ['a', 'c']); 4// => { 'b': '2' }

https://lodash.com/docs/4.17.15#omit

投稿2024/04/22 02:55

natural2

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Omitの存在意義については答えられませんが、混乱を招きやすい仕様であることは確かなようです。
次のようにしたらどうでしょうか?

ts

1const userOmit: Omit<User, "id"> = {name:user.name, age:user.age}

投稿2024/04/20 23:19

pea

総合スコア426

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

natural2

2024/04/21 12:35 編集

回答有り難うございます! 要素数が少ない今回の場合であれば書いていただいたように指定する事で解決できますね! 要素数が多い場合であれば沢山書くことになってしまうので const userOmit: Omit<User, "id"> = { ...user } のように書いてうまくなると嬉しいですがダメのようですね。。。 いい落とし所が見つからず難しいですね。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.44%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問