Angular 如何在TypeScript的函数定义中用子类型替换类型?

Angular 如何在TypeScript的函数定义中用子类型替换类型?,angular,typescript,Angular,Typescript,这段代码导致错误,因为FunctionType等待一个函数,该函数将父函数(而不是子函数)作为参数和结果之一。有没有办法让它与父母的直系后代(像孩子一样)一起工作 什么时候有用? 假设我们有一个Angular组件,它接受简单的slim项(比如父项)和handler函数,但是我们想给这个组件一个子项和相应的handler函数(在我们的例子中是myFunction)。所有组件的内部功能仅涉及父级相关字段。 我知道可以在Angular和override属性中为父组件的类创建子类。但是为每个新的“子”类

这段代码导致错误,因为FunctionType等待一个函数,该函数将父函数(而不是子函数)作为参数和结果之一。有没有办法让它与父母的直系后代(像孩子一样)一起工作

什么时候有用? 假设我们有一个Angular组件,它接受简单的slim项(比如父项)和handler函数,但是我们想给这个组件一个子项和相应的handler函数(在我们的例子中是myFunction)。所有组件的内部功能仅涉及父级相关字段。 我知道可以在Angular和override属性中为父组件的类创建子类。但是为每个新的“子”类型创建一个新的组件或类将是一件痛苦的事情。 只是举个例子

我的一般问题是如何定义不仅接受父接口,而且还接受所有子接口(不列出子接口)的函数类型


实际上,我正在尝试实现基本的替代原则:对父母有效的东西应该对孩子有效。

我想你可以用泛型来实现它,这似乎是你的做法:

interface Parent {
    name: string;
}

interface Child extends Parent {
    name: string;
    text: string;
}

function myFunction(text: string, target: Child): Child {
    target.text = text;
    console.log(target);
    return target;
}

const testChild: Child = {
    name: 'test',
    text: 'sample',
};

declare type FunctionType = (text: string, target: Parent) => Parent;

const func: FunctionType = myFunction;

func('newText', testChild);

declare-type-FunctionType=(text:string,target:T)=>T;
const func:FunctionType=myFunction;

示例显示它仅适用于
Parent
的后代,因为
T扩展了Parent


“对父母有效的东西应该对孩子有效”。如果有类型为
parent
parent
变量,可以调用
func(“,parent)
,对吗?但是
myFunction(“,parent)
会做坏事。因此,替换原则表示不能将
myFunction
用作
func
的值。您的用例(带代码)是什么?您可以将
FunctionType
更改为通用类型,但我不知道这是否适用于您。这不是我所需要的。您的示例说明myFunction肯定可以使用。但在我的例子中,它可能是具有相同签名但不同子类型的任何其他函数。我看起来像是
FunctionType
,但不是
any
,只能使用父代的子代和父代本身。@splash27我添加了一个非工作版本的示例,该版本使用一个不从父代继承的类。如您所见,它将显示一个错误
declare type FunctionType<T extends Parent = Parent> = (text: string, target: T) => T;

const func: FunctionType<Child> = myFunction;