【发布时间】:2021-12-07 01:44:24
【问题描述】:
考虑以下代码:
interface IUserData {
FirstName: string,
LastName: string,
Email: string,
Password: string
}
interface IState extends IUserData {
isSuccess: boolean
}
const state: IState = {
FirstName: 'Jan',
LastName: 'Kowalski',
Email: 'email',
Password: 'abc',
isSuccess: true
}
const testFunction = (userData: IUserData): void => {
console.log(userData);
}
testFunction(state)
代码返回:
{
FirstName: 'Jan',
LastName: 'Kowalski',
Email: 'email',
Password: 'abc',
isSuccess: true
}
问题是为什么函数甚至接受state 对象。我希望编译器至少会抛出参数类型不正确的错误。
对此进行测试,我想看看是否有可能向函数提供一个对象,该对象的属性是原始对象属性的子集,而不会将它们映射到新对象。
简而言之,所需的输出是:
{
FirstName: 'Jan',
LastName: 'Kowalski',
Email: 'email',
Password: 'abc',
}
【问题讨论】:
-
为什么会抱怨?根据定义,实现 IState 的对象是实现 IUserData 的对象 - 无法通过该接口访问额外的属性,因此它们无论如何都无关紧要。并且 TypeScript 在运行时不存在,如果你想真正过滤掉一些属性,你必须为此编写 JavaScript。
标签: typescript object types interface