Я пытаюсь выполнить строгую проверку типа функции (A), передаваемой в параметре другой функции. Возвращаемое значение A должно быть Partial
данного интерфейса.
Итак, учитывая следующий интерфейс:
interface IUser {
name: string;
age: number;
}
Я хочу, чтобы TypeScript выдавал ошибку, если возвращаемое значение функции не является Partial
этого интерфейса
function check(f: () => Partial<IUser>) {
return f; // implementation of this function is pointless, only the type checking here interests me
}
При возврате объекта, который не содержит ни одного ключа интерфейса, TS выдает ошибку, которая ожидается.
Но когда на возвращаемом объекте есть хотя бы один из ключей IUser
, ошибки больше нет, это неожиданно
check(() => ({ foo: 'bar' })); // GOOD - Type '{ foo: 'bar' }' has no properties in common with type 'Partial<IUser>'.
check(() => ({ foo: 'bar', name: 'Dar' })); // BAD - no error
Я не могу понять, почему TS не выдает ошибку, потому что при попытке создать объект типа Partial<IUser>
с дополнительным свойством выдается ошибка.
const o: Partial<IUser> = {
name: 'Dar',
foo: 'bar',
}; // Object literal may only specify known properties, and 'foo' does not exist in type 'Partial<IUser>'.
Есть ли способ заставить TS выдать ошибку при использовании обратного вызова, подобного этому?
Примечание: тесты выполнены с использованием TypeScript 2.8.1