Acd*_*cdn 12 javascript interface object typescript
interface Person {
name: string;
surname: string;
}
let person1: Person = {};
person1.name = "name"
person1.surname = "surname"
Run Code Online (Sandbox Code Playgroud)
当我声明 person1 时,出现此错误:
Type '{}' is missing the following properties from type Person
qiA*_*lex 25
这是一个更好的方法:
let person1: Person = {name: '', surname: ''};
Run Code Online (Sandbox Code Playgroud)
但是如果你想要完全空的对象,那么你可以像这样破解它:
let person1: Person = {} as Person;
Run Code Online (Sandbox Code Playgroud)
评论后更新:
看这个unpredictableFunction:
const unpredictableFunction = (): string|number|string[] => {
return Math.random() > 0.5 ? 'string' : Math.random() > 0.5 ? 9999 : ['1', '2', '3']
};
Run Code Online (Sandbox Code Playgroud)
它可能返回数字,也可能返回字符串,或者可能返回字符串数组
const person: Person = {name: '', surname: ''};
person.name = unpredictableFunction (); // this is a case you are talking about
Run Code Online (Sandbox Code Playgroud)
在这种情况下你会看到
Type 'string | number | string[]' is not assignable to type 'string'.
答案是:
查看您的代码并确保仅将字符串分配给 Person 属性,
或者更新接口以准备不同的值:
interface Person {
name: string | number | string[];
surname: string;
}
Run Code Online (Sandbox Code Playgroud)
您已经定义了一个具有两个必需属性的接口。因此,当您定义具有 Person 接口类型的对象时,您必须立即定义这些属性,如下所示:
let person: Person = {
name: '',
surname: ''
}
Run Code Online (Sandbox Code Playgroud)
但是,如果您认为这些属性不是必需的而是可选的,您可以将界面更改为:
interface Person {
name?: string;
surname?: string;
}
Run Code Online (Sandbox Code Playgroud)
使用?语法将属性标记为可选。下面的代码应该可以工作:
let person: Person = {};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
61383 次 |
| 最近记录: |