TypeScript - 检查给定'任何'参数是否为自定义类型?
我有一个函数模板是这样的: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。
把它当作JavaScript来对待。
var userId = arg.userId;
var gameMode = arg.gameMode;
if (userId && gameMode) {
var myCreateLobbyParameter = new CreateLobbyParameter {
userId = userId,
gameMode = gameMode
}
}
那么你有一个真正CreateLobbyParameter
对象一起工作,或者你可以用不符合要求的参数做什么。
我开启了'noImplicitAny'选项,但让我尝试修改代码。 –
这个解决了,当我给他们'任何'类型,感谢您的帮助。 –
高兴地帮助:) –
我居然找到另一种方式:
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());
不太清楚什么是你想这样做,你想输入一个函数,'any'作为参数? – asosnovsky
“GameMode”是枚举类还是其他类? –
您应该为'args'定义一个接口,而不是将其输入为'any'。 – JohnnyHK