BaseNode, args: T.Tuple[str, T.Optional[T.Union[str, int]], T.Optional[str]], kwargs: T.Dict[str, T.Any]) -> T.Any: ... pass When should you chose `typed_pos_args('name', varargs=str, min_varargs=1)` vs `typed_pos_args('name', str, varargs=str)`? The answer has to do with the semantics of the function, if all of the inputs are the same type (such as with `files()`) then the former is correct, all of the arguments are string names of files. If the first argument is something else the it should be separated. c