Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 为什么我们可以将一个属性较多的接口分配给另一个属性较少的接口?_Typescript - Fatal编程技术网

Typescript 为什么我们可以将一个属性较多的接口分配给另一个属性较少的接口?

Typescript 为什么我们可以将一个属性较多的接口分配给另一个属性较少的接口?,typescript,Typescript,我希望下面的代码不会编译。原因是当将人员和专家分配给人员时,人员常量满足人员常量的类型,该常量应为人员类型。但是,专家有一个技能字段,该字段在人员类型上不存在 但它确实可以编译 interface Person { name: string; age?: number; } interface Developer { name: string; age?: number; skills: string[]; } const person: Person = { na

我希望下面的代码不会编译。原因是当将
人员
专家
分配给
人员
时,
人员
常量满足
人员
常量的类型,该常量应为
人员
类型。但是,
专家
有一个
技能
字段,该字段在
人员
类型上不存在

但它确实可以编译

interface Person {
  name: string;
  age?: number; 
}

interface Developer {
  name: string;
  age?: number;
  skills: string[];
}

const person: Person = {
  name: 'john doe',
  age: 20,
};

const expert: Developer = {
  name: 'jane doe',
  skills: ['javascript', 'react']
};

const people: Person[] = [ person, expert ];

console.log(people);


Developer
在结构上是
人的一个子类型。任何
开发人员
都是
人员
,因此您可以在需要人员的地方指定开发人员。这是OOP的一个基本租户。(TS中的例外是多余的属性检查,但它只对新对象文本起作用)这是否回答了您的问题?同样相关:| |
开发者
在结构上是
的一个子类型。任何
开发人员
都是
人员
,因此您可以在需要人员的地方指定开发人员。这是OOP的一个基本租户。(TS中的例外是多余的属性检查,但它只对新对象文本起作用)这是否回答了您的问题?也相关:|||