Typescript没有抱怨对象扩展语法中的类型错误

bmp9r5qi  于 2023-05-19  发布在  TypeScript
关注(0)|答案(1)|浏览(169)

下面的代码段应该抛出一个类型脚本错误,但是当使用对象扩展语法时,它不会在任何代码段中抱怨。
请注意,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;
}

我还在一个在线打字脚本编辑器中进行了测试,以排除环境中的潜在问题。
有人能帮我弄明白发生了什么吗?另外,有人能提供一个例子,当使用对象扩展语法时,检测拼写错误的解决方案吗?
多谢了!

watbbzwu

watbbzwu1#

您将companyaddress声明为可选(通过使用?:)。
所以typescript可以让你的返回对象没有这些属性。
这应该会抛出一个错误:

interface TestType {
  company: string; // I removed the questions mark
  address: string;
}

function testFunction(): TestType {
  const cond = true;
  const testDto = {
    ...(cond ? { company: '' } : {}),
    ...(cond ? { address: '' } : {}),
  };
  return testDto;
}

相关问题