2017-12-27 391 views
1

我有一個函數模板是這樣的:TypeScript - 檢查給定'任何'參數是否爲自定義類型?

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

而且我有一類叫做CreateLobbyParameter

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

如果給any類型參數args不是類似於CreateLobbyParameter(如{userId: 0, gameMode: 0},但不{userId:0} );我想要處理這種情況。

我試過typeof(arg as CreateLobbyParameter),但它返回字符串"object"的參數{userId: 0, gameMode: 0},而不是CreateLobbyParameter.

此外,arg instanceof CreateLobbyParameter返回false。

+0

不太清楚什麼是你想這樣做,你想輸入一個函數,'any'作爲參數? – 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

這個解決了,當我給他們'任何'類型,感謝您的幫助。 –

+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); 
} 

用法:

hasNull(args, new CreateLobbyParameter()); 
相關問題