下面的代码段应该抛出一个类型脚本错误,但是当使用对象扩展语法时,它不会在任何代码段中抱怨。
请注意,a为此测试特意为address
属性添加了一个排印错误。
片段A.1. - 不抛出错误
interface TestType {
company?: string;
address?: string;
}
function testFunction(): TestType {
const cond = true;
const testDto = {
...(cond ? { company: '' } : {}),
...(cond ? { addressss: '' } : {}),
};
return testDto;
}
片段A.2. - 不抛出错误
interface TestType {
company?: string;
address?: string;
}
function testFunction() {
const cond = true;
const testDto:TestType = {
...(cond ? { company: '' } : {}),
...(cond ? { addressss: '' } : {}),
};
return testDto;
}
片段A.3. - 不抛出错误
interface TestType {
company?: string;
address?: string;
}
function testFunction() {
const cond = true;
const testDto= {
...(cond ? { company: '' } : {}),
...(cond ? { addressss: '' } : {}),
};
return testDto as TestType;
}
片段B.1. - 成功抛出错误
这个代码段成功地抛出了一个类型脚本错误,因为我删除了对象扩展语法,并将接口定义放在常量名称后面。
interface TestType {
company?: string;
address?: string;
}
function testFunction() {
const cond = true;
const testDto:TestType = {
company: '',
addressss: '',
};
return testDto;
}
片段B.2. - 不抛出错误
即使删除了对象扩展语法,但函数返回类型中定义了接口,此代码段仍然没有抛出类型脚本错误。
interface TestType {
company?: string;
address?: string;
}
function testFunction():TestType {
const cond = true;
const testDto = {
company: '',
addressss: '',
};
return testDto;
}
我还在一个在线打字脚本编辑器中进行了测试,以排除环境中的潜在问题。
有人能帮我弄明白发生了什么吗?另外,有人能提供一个例子,当使用对象扩展语法时,检测拼写错误的解决方案吗?
多谢了!
1条答案
按热度按时间watbbzwu1#
您将
company
和address
声明为可选(通过使用?:
)。所以typescript可以让你的返回对象没有这些属性。
这应该会抛出一个错误: