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

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

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

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

Q&A

解決済

1回答

359閲覧

TypeScriptで、インスタンスの作成にUtility Typeを使いたいが型エラーが出る。

moyong

総合スコア19

TypeScript

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

0グッド

0クリップ

投稿2021/05/25 14:31

編集2021/05/25 14:34

###前提
TypeScript入門者です。
トランプカーゲームを作っており、デッキを初期化する際の実装で躓いております。
こちらの記事を参考に、Cardクラスを初期化する際にsuitとrankにstring型をつけたいのですが
プロパティ~は型Omit<~>に存在しませんというエラーが出ます。

###エラー画面
赤波線は画像の該当箇所にだけ出ています。
最後の行の引数の渡し方がよくないのでしょうか?
イメージ説明

初期化する際に

constructor(suit: string, rank: string){}

と書いてもいいと思うのですがメンバ変数の定義と重複しているので、記事で知った方法を試しているところです。
オブジェクトそのものを受け取るので、初期化に必要ないメソッドはOmitする必要がある、という認識です。
こういう連想配列を使ってインスタンス作成する例が調べてもあまり見つからなかったので質問させてください。

###コード

class Card { private suit: string; private rank: string; public constructor(arg: Omit<Card, 'getRankNumber'>) { this.suit = arg.suit; this.rank = arg.rank; } // public getRankNumber(): number { // const hashmap: {[key: string]: number} = { // "A":11, "J":10, "Q":10, "K":10, // } // if(hashmap[this.rank] === undefined) return hashmap[this.rank]; // else return Number(this.rank); // } } class Deck { private static suits = ["H", "D", "C", "S"]; private static ranks = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]; private cards: Card[] = []; public constructor(gameType: "BlackJack" | "Poker") { this.resetDeck(gameType); } private resetDeck(gameType: "BlackJack" | "Poker"): void { this.cards = []; for(let suit of Deck.suits) { for(let rank of Deck.ranks) { this.cards.push(new Card({suit: suit, rank: rank})); } } } }

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

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

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

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

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

hoshi-takanori

2021/05/25 23:27

suit や rank が private だからでは。
guest

回答1

0

自己解決

hoshi-takanoriさん

ありがとうございます。privateを消すと解決しました。
Omitなど使わず普通に引数を渡してやるやり方を試しところprivateのままにしていても問題ありませんでした。
new Cardのキーを指定したとき既にCardクラスのsuitとrankを探してたんですね。

投稿2021/05/26 00:35

moyong

総合スコア19

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問