2017-12-27 20 views
1

私はこのような関数テンプレートがあります。TypeScript - 'any'パラメータがカスタムタイプであるかどうかを確認しますか?

function (..., args: any) {...} 

を私はCreateLobbyParameterというクラスがあります:anyは、例えば{userId: 0, gameMode: 0}(引数パラメータはCreateLobbyParameterに類似していない型付けはなく、{userId:0}与えられた場合

export class CreateLobbyParameter { 
    userId: number; 
    gameMode: GameMode; 
} 

を);私はそのような状況に対処したい。

falseを返しarg instanceof CreateLobbyParameter、また、私はtypeof(arg as CreateLobbyParameter)を試してみたが、それは、パラメータ{userId: 0, gameMode: 0}の文字列"object"を返し、ないCreateLobbyParameter.

+0

非常に明確ではありません? – asosnovsky

+0

'GameMode'は列挙型ですか、別のクラスですか? –

+0

おそらく、 'any'とタイプするのではなく、' args'のためのインターフェースを定義するべきです。 – JohnnyHK

答えて

3

JavaScriptのように扱います。

var userId = arg.userId; 
var gameMode = arg.gameMode; 
if (userId && gameMode) { 
    var myCreateLobbyParameter = new CreateLobbyParameter { 
     userId = userId, 
     gameMode = gameMode 
    } 
} 

その後、あなたはで動作するように本当のCreateLobbyParameterオブジェクトを持っているか、非準拠の引数で何でも行うことができます。

+0

私は 'noImplicitAny'オプションを有効にしましたが、コードを修正しようとしました。 –

+1

これは、私が「any」型を与えたときにうまくいった、助けてくれてありがとう。 –

+0

お手伝いします:) –

0

は、私が実際には別の方法を発見:

export function isSimilar(object: any, target: any): boolean { 
    if (typeof(object) !== object && (typeof(object) !== typeof(target))) { 
     return true; 
    } 
    const keys: string[] = Object.keys(object); 
    const targetKeys: string[] = Object.keys(target); 
    return !keys.every(x => targetKeys.indexOf(x) >= 0); 
} 

使用法:あなたは、あなたが引数として `any`を取る関数を入力しようとしているやろうとしているもの

hasNull(args, new CreateLobbyParameter()); 
関連する問題