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

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

新規登録して質問してみよう
ただいま回答率
85.47%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

TypeScript

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

Q&A

解決済

2回答

284閲覧

以下のC#のコードをTypescriptで実現する方法を教えて下さい(継承しているインターフェイスの確認)

yukimakura

総合スコア1

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

TypeScript

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

0グッド

0クリップ

投稿2024/03/16 11:39

実現したいこと

以下のC#のコードをTypescriptで実現する方法を教えて下さい(継承しているインターフェイスの確認)

発生している問題・分からないこと

普段、C#でコードを書いている者ですが、急遽TypeScriptにてコードを書かなければならなくなりました。
普段どおりに設計して、TypeScriptでそれを実現しようとしたところ、クラスのプロパティでの判定や、instanceofの判定ばかり情報として出てきてしまい、私が実現したいことのやり方がほとんど出てきませんでした。

諦めを付けるために藁にもすがる思いで質問します。

[背景]
なんでこんなムダはことをしてるのか疑問に思われると思うので、
一応背景もお伝えすると、あえて実装のないインターフェイスを継承することで、
要件定義でモデリングされたモデルに素直なアーキテクチャおよびコードを表現することができます。
私としてはあまりモデルと実装のギャップを発生させたくないのです。

何卒よろしくおねがいします。

該当のソースコード

C#

1using System; 2 3interface basekey{ 4 string key {get;} 5} 6 7interface hoge : basekey{ 8 9} 10 11interface foo : basekey{ 12 13} 14 15class hooo : hoge{ 16 public string key => "hhhh"; 17} 18 19 20public class HelloWorld 21{ 22 public static void Main(string[] args) 23 { 24 25 var b = new hooo(); 26 Assert.Equals(true,b is hoge); 27 Assert.Equals(false,b is foo); 28 } 29}

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

いろいろぐぐりました。
https://stackoverflow.com/questions/14425568/interface-type-check-with-typescript
とか
一応copilotの結果(間違えてる)

interface BaseKey {
key: string;
}

interface Hoge extends BaseKey {
}

interface Foo extends BaseKey {
}

class Hooo implements Hoge {
public get key(): string {
return "hhhh";
}
}

class Judge {
public isHooo(b: BaseKey): boolean {
return b instanceof Hoge;
}
}
AI で生成されたコード。ご確認のうえ、慎重にご使用ください。FAQ で詳細を確認。
こちらのTypescriptコードは、C#のクラスとインターフェースを適切に変換しています。HoooクラスはHogeインターフェースを実装しており、JudgeクラスのisHoooメソッドはHoge型のオブジェクトを判定しています。12

補足

特になし

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

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

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

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

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

guest

回答2

0

ベストアンサー

不可能です。TypeScriptの型は、classなどを除いてトランスパイル時に吹き飛んでしまいます。

interfaceなど、「TypeScriptにしか存在しない型」の情報から実行時に使う値を得る方法はありません。

投稿2024/03/16 13:57

maisumakun

総合スコア145184

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

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

maisumakun

2024/03/16 13:59

オブジェクトに、シンボルキーなど目立たない値を持たせて、それで仕分けるようなコードを書くことはできるかもしれません。
yukimakura

2024/03/17 03:03

DIコンテナ(inversify)などでも、シンボルの索引用クラスを作ってインターフェイス経由の解決を図っているようでした… やはり、jsにinterfaceの概念が導入されないときつそうですね…
guest

0

TypeScriptはTypeScriptのまま動くわけではないので他言語の常識は通用しない。
https://typescriptbook.jp/reference/object-oriented/interface/instanceof-and-interfaces

投稿2024/03/16 23:47

pcs

総合スコア347

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問