I'd just grab the expected types right out, then do the checks. Something like:
```cpp
Local<String> str = args[0].As<String>();

if (!str->IsString())
  return ThrowTypeError("First argument must be a string");
```