当前位置: 首页 > 知识库问答 >
问题:

这两个打字代码有什么不同?

罗渝
2023-03-14
interface SquareConfig {
  color?: string;
  width?: number;
}

function createSquare(config: SquareConfig): {color: string; area: number} {
  var newSquare = {color: "white", area: 100};
  if (config.color) {
    newSquare.color = config.color;
  }
  if (config.width) {
    newSquare.area = config.width * config.width;
  }
  return newSquare;
}

var obj = {color1: "black"};
var mySquare = createSquare(obj);
interface SquareConfig {
  color?: string;
  width?: number;
}

function createSquare(config: SquareConfig): {color: string; area: number} {
  var newSquare = {color: "white", area: 100};
  if (config.color) {
    newSquare.color = config.color;
  }
  if (config.width) {
    newSquare.area = config.width * config.width;
  }
  return newSquare;
}

var mySquare = createSquare({color1: "black"});

错误:

Test.ts(18,30):错误TS2345:类型为“{color1:String;}”的参数不能分配给类型为“squareConfig”的参数。对象文本只能指定已知属性,并且“SquareConfig”类型中不存在“Color1”。

共有1个答案

曾嘉祯
2023-03-14

您的两个示例都有相同的错误,即指定了squareconfig不知道的属性,这通常意味着您键入了错误的属性名。

在您的示例中,您指定了color1,您可能打算使用color

在添加检查未指定属性的附加功能之前,此代码将使用旧版本的TypeScript编译。

var mySquare = createSquare({color: "black"});
var mySquare = createSquare(<SquareConfig>{color1: "black"});

你的“分离度”越少,编译器就越严格...例如:

// Error
var obj: SquareConfig = {color1: "black"};

// OK
var obj = {color1: "black"};
var obj2: SquareConfig = obj;

让我们看看第一个示例,我们说“我打算创建一个squareconfig”。编译器说,“嗯,没有必需项,因为一切都是可选的,但您创建的对象具有我不认识的属性--所以我会警告您”。

第二个例子略有不同。我们表示“我打算使用一个作为squareconfig的对象”。编译器会说,“您打算使用的对象缺少任何必需的属性……每个属性是否具有与squareconfig结构匹配的正确类型-是的。”

 类似资料:
  • 问题内容: 我正在阅读DigitalOcean的golang客户程序。我注意到他们在变量中创建了* Op结构的实例。示例:https: //github.com/digitalocean/godo/blob/master/droplets.go#L32 为什么需要此行? 问题答案: 该行是*DropletsServiceOp满足DropletsService接口的编译时检查。 该行对程序的执行没有

  • 在每个print语句之前使用扫描器解决了这个问题,但我想要一个好的编程方法来解决这个问题。

  • 问题内容: 范例1: 输出为: 范例2: 输出: 我只是不明白为什么将saySomething设为非静态会导致第二次调用saySomething调用Cow版本而不是Animal版本。我的理解是, 这两种情况都是输出。 问题答案: 静态方法在编译时绑定到其类,并且不能多态使用。在Animal上声明“静态”方法时,该方法永远绑定到Animal类,并且不能被覆盖。静态方法绑定到Class对象,而不是Cl

  • 和有什么区别? 我对。class文件进行了反编译,发现在第一种情况下,JVM将使用multianwearray来创建数组,而在第二种情况下,它将使用AneWarRay。 我认为在第一种情况下,JVM将创建一个连续的空间。我说的对吗?

  • 问题内容: 考虑以下两种情况: (转到Playground链接) 第二个打印9.120000000000001,实际上很好 但是,为什么第一行打印9.12,但末尾没有…01?Go是否会将两个未类型化的常数相乘,并在编译时将它们简单地替换为9.12文字? 问题答案: 根据规格: 常量表达式总是精确地求值;中间值和常量本身可能需要比该语言中任何预声明类型支持的精度大得多的精度。 以来 是一个常数表达式