2017-12-27 32 views
1

는이 같은 함수 템플릿이 있습니다TypeScript - 'any'매개 변수가 사용자 정의 유형인지 확인하십시오.

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

을 그리고 클래스가 CreateLobbyParameter라고 있습니다

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

주어진 any은 인수 매개 변수가 {userId:0} 예를 들어 {userId: 0, gameMode: 0} (CreateLobbyParameter 유사하지 않다,하지만 입력 한 경우); 나는 그 상황을 처리하고 싶다.

것은 내가 typeof(arg as CreateLobbyParameter)을 시도했다, 그러나 매개 변수 {userId: 0, gameMode: 0}의 캐릭터 "object"을 반환하고, 또한 CreateLobbyParameter.

, arg instanceof CreateLobbyParameter false를 반환하지.

+0

명확하지 않음 ? – asosnovsky

+0

'GameMode'는 열거 형 또는 다른 클래스입니까? –

+0

당신은'args'를'any'라고 입력하는 대신 인터페이스를 정의해야합니다. – 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());