Это потому, что когда вы используете «свежий» литерал объекта (то есть тот, который еще не был назначен переменной) в месте, которое ожидает определенного типа, часто ошибка для добавления свойствне упоминается в типе.Так что это помечается как ошибка через проверку избыточного свойства .Это одно из немногих мест, где тип рассматривается как «закрытый» или «точный» , а не «открытый».
Существуют обходные пути в том случае, если вы не имеете в виду проверку лишних свойств.Одним из них является добавление индексной подписи к типу параметра n
, чтобы все дополнительные свойства были приемлемыми:
function greet(n: Named & { [x: string]: unknown }) {
console.log("Hello, " + n.name);
}
greet({ name: "Alice", location: "Seattle" }); // okay
Или, если вы обычно хотите такую проверку, но просто хотитечтобы вызвать greet()
с этим литералом конкретного объекта, вы можете использовать утверждение типа , чтобы избежать промежуточных переменных:
greet({ name: "Alice", location: "Seattle" } as Named); // okay
Это ваше дело.Хорошо, надеюсь, это поможет;удачи!