- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
interface Instance {
[param: string]: string;
}
const checkRequiredProps = (instance: Instance, requiredProps: string[]) => {
const props = requiredProps.filter((prop: string) => {
return !instance[prop];
});
console.log(props);
};
interface IHuman {
name: string;
}
class Test {
private readonly _name: string;
constructor(human: IHuman = {} as IHuman) {
checkRequiredProps(human, ['name']);
this._name = human.name;
}
public get name(): string {
return this._name;
}
}
const test = new Test({ name: 'loki' });
我有 2 种类型 Instance
,这是一个具有任意键值对的简单对象。还有 IHuman
包含 name
属性。我正在尝试将 IHuman
传递给接受 Instance
的函数。我收到如图所示的错误。
但是当我将 IHuman
从接口(interface)更改为 type
时。错误消失了。
type IHuman = {
name: string;
}
关于什么错误以及为什么在第二种情况下错误消失了。有没有更好的方法来输入 Instance
。我希望 Instance
成为可以接受任何对象的通用类型。有更好的方法吗?
最佳答案
我相信这是因为 TypeScript 中的 interface
不能像其他更通用的接口(interface)一样被鸭子类型化。您可以让 IHuman
扩展 Instance
以使其工作,但您可能不想为每个要运行的接口(interface)都这样做 checkRequiredProps
上。
编辑:从下面的评论中,checkRequiredProps
的函数签名被更改为一个对象,其键是string
,并且可以是任何
类型。这仍将允许数组传入,但不应传入字符串、 bool 值、null
和 undefined
。
const checkRequiredProps = (instance: {[key: string]: any}, requiredProps: string[]) => {
const props = requiredProps.filter((prop) => {
return !instance[prop];
});
console.log(props);
};
interface IHuman {
name: string;
}
interface IWerewolf {
name: string;
}
class Test {
private readonly _name: string;
constructor(human: IHuman = {} as IHuman, werewolf: IWerewolf = {} as IWerewolf) {
checkRequiredProps(human, ['name']);
checkRequiredProps(werewolf, ['name']);
this._name = human.name;
}
public get name(): string {
return this._name;
}
}
const test = new Test({ name: 'loki' }, { name: 'wolfington' });
添加了另一个接口(interface)
,以确保狼人享有与人类相同的权利。
关于 typescript :找不到索引签名是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57015018/
例如,我有一个父类Author: class Author { String name static hasMany = [ fiction: Book,
代码如下: dojo.query(subNav.navClass).forEach(function(node, index, arr){ if(dojo.style(node, 'd
我有一个带有 Id 和姓名的学生表和一个带有 Id 和 friend Id 的 Friends 表。我想加入这两个表并找到学生的 friend 。 例如,Ashley 的 friend 是 Saman
我通过互联网浏览,但仍未找到问题的答案。应该很容易: class Parent { String name Child child } 当我有一个 child 对象时,如何获得它的 paren
我正在尝试创建一个以 Firebase 作为我的后端的社交应用。现在我正面临如何(在哪里?)找到 friend 功能的问题。 我有每个用户的邮件地址。 我可以访问用户的电话也预订。 在传统的后端中,我
我主要想澄清以下几点: 1。有人告诉我,在 iOS 5 及以下版本中,如果您使用 Game Center 设置多人游戏,则“查找 Facebook 好友”(如与好友争夺战)的功能不是内置的,因此您需要
关于redis docker镜像ENTRYPOINT脚本 docker-entrypoint.sh : #!/bin/sh set -e # first arg is `-f` or `--some-
我是一名优秀的程序员,十分优秀!