###前提
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})); } } } }
suit や rank が private だからでは。
回答1件
あなたの回答
tips
プレビュー