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
Javascript 错误:类型“{}”缺少类型中的以下属性_Javascript_Typescript_Object_Interface - Fatal编程技术网

Javascript 错误:类型“{}”缺少类型中的以下属性

Javascript 错误:类型“{}”缺少类型中的以下属性,javascript,typescript,object,interface,Javascript,Typescript,Object,Interface,当我声明person1时,我得到以下错误: 类型“{}”缺少类型Person的以下属性这是一种更好的方法: interface Person { name: string; surname: string; } let person1: Person = {}; person1.name = "name" person1.surname = "surname" 但如果你想要一个完全空的对象,你可以像这样破解它: let person1: Person = {name: '', sur

当我声明person1时,我得到以下错误:

类型“{}”缺少类型Person的以下属性这是一种更好的方法:

interface Person {
  name: string;
  surname: string;
}
let person1: Person = {};

person1.name = "name"
person1.surname = "surname"
但如果你想要一个完全空的对象,你可以像这样破解它:

let person1: Person = {name: '', surname: ''};
interface Person {
  name: string | number | string[];
  surname: string; 
}
评论后更新:

看看这个不可预测的函数:

它可以返回数字、字符串或字符串数组

const unpredictableFunction = (): string|number:string[] => {
  return Math.random() > 0.5 ? 'string' : Math.random() > 0.5 ? 9999 : ['1', '2', '3']
};
在这种情况下,您将看到

类型“string | number | string[]”不可分配给类型“string”

答案是:

查看您的代码,确保仅为人员属性分配字符串

或更新接口以准备使用不同的值:

const person: Person = {name: '', surname: ''};
person.name = unpredictableFunction (); // this is a case you are talking about
这是一个更好的方法:

interface Person {
  name: string;
  surname: string;
}
let person1: Person = {};

person1.name = "name"
person1.surname = "surname"
但如果你想要一个完全空的对象,你可以像这样破解它:

let person1: Person = {name: '', surname: ''};
interface Person {
  name: string | number | string[];
  surname: string; 
}
评论后更新:

看看这个不可预测的函数:

它可以返回数字、字符串或字符串数组

const unpredictableFunction = (): string|number:string[] => {
  return Math.random() > 0.5 ? 'string' : Math.random() > 0.5 ? 9999 : ['1', '2', '3']
};
在这种情况下,您将看到

类型“string | number | string[]”不可分配给类型“string”

答案是:

查看您的代码,确保仅为人员属性分配字符串

或更新接口以准备使用不同的值:

const person: Person = {name: '', surname: ''};
person.name = unpredictableFunction (); // this is a case you are talking about

您已经定义了一个具有两个必需属性的接口。因此,当您使用Person接口类型定义对象时,必须立即定义以下属性:

let person1: Person = {name: '', surname: ''};
interface Person {
  name: string | number | string[];
  surname: string; 
}
但是,如果您认为这些属性不是必需的,而是可选的,则可以将界面更改为:

let person: Person = {
    name: '',
    surname: ''
}
使用?语法将属性标记为可选。然后,以下代码应该可以工作:

interface Person {
    name?: string;
    surname?: string;
}

您已经定义了一个具有两个必需属性的接口。因此,当您使用Person接口类型定义对象时,必须立即定义以下属性:

let person1: Person = {name: '', surname: ''};
interface Person {
  name: string | number | string[];
  surname: string; 
}
但是,如果您认为这些属性不是必需的,而是可选的,则可以将界面更改为:

let person: Person = {
    name: '',
    surname: ''
}
使用?语法将属性标记为可选。然后,以下代码应该可以工作:

interface Person {
    name?: string;
    surname?: string;
}

这是有效的,但在分配值时,我得到了以下错误:property Person.name:stringType'string | number | string[]”不可分配给类型'string'。您是按字面意义分配名称还是其他什么?@shamposham,我不确定我是否在关注youthanks@qiAlex,很好的解释。只是觉得奇怪,我的值肯定是一个字符串,但出于某种原因,它仍然给我这个错误。在我的实际项目中,我的值来自一个输入,所以它是一个字符串!一旦我添加到.Stringvalue,它就可以工作了,但我发现这是多余的。关于为什么会发生这种情况有什么想法吗?@Shamposham您关于如何获得价值的评论让我思考,并帮助我现在理解为什么会发生这种错误!!!非常感谢,我最后使用了“as string”,但我知道背后的原因!你是个明星!这是有效的,但在分配值时,我得到了以下错误:property Person.name:stringType'string | number | string[]”不可分配给类型'string'。您是按字面意义分配名称还是其他什么?@shamposham,我不确定我是否在关注youthanks@qiAlex,很好的解释。只是觉得奇怪,我的值肯定是一个字符串,但出于某种原因,它仍然给我这个错误。在我的实际项目中,我的值来自一个输入,所以它是一个字符串!一旦我添加到.Stringvalue,它就可以工作了,但我发现这是多余的。关于为什么会发生这种情况有什么想法吗?@Shamposham您关于如何获得价值的评论让我思考,并帮助我现在理解为什么会发生这种错误!!!非常感谢,我最后使用了“as string”,但我知道背后的原因!你是个明星!为什么不内联name和姓氏属性的设置呢?空对象不是人,通过对任意对象进行强制转换,您有点违背了类型脚本的观点,这就是接口的好处,对吗?定义对象所需的属性。如果您希望它们是可选的,您可以这样做:name?:string;为什么不内联name和姓氏属性的设置呢?空对象不是人,通过对任意对象进行强制转换,您有点违背了类型脚本的观点,这就是接口的好处,对吗?定义对象所需的属性。如果您希望它们是可选的,您可以这样做:name?:string;