如何告诉TypeScript我的属性可以是布尔值还是具有特定签名的函数?

亚当·巴拉尼(Adam Baranyai)

考虑TypeScript定义中的以下行

interface MyOptions {          
     public highlightMatch?: (instance: MyInstance, rendered: JQuery<HTMLElement>) => void;
}

基于此,TypeScript我知道对于我的highlightMatch属性,我期望一个具有给定签名的函数,该函数不会返回任何内容。我怎么能TypeScript说这个相同的属性也可以是一个boolean值?

我试过了,但这不起作用:

public highlightMatch?: boolean | (instance: MyInstance, rendered: JQuery<HTMLElement>) => void;
遥远

我不建议这样做。您将进行大量检查,以了解您的财产是一种类型还是另一种类型。

还请记住

// this will be always true if it contains `true` or a function
if(this.highlightMatch) {} 

也就是说,您可以在Type上变形

interface MyInstance {
    x : any
}

type SomeFunction = (instance: MyInstance, rendered: JQuery<HTMLElement>) => void;
type BooleanOrFunction = boolean | SomeFunction

interface MyOptions {          
    highlightMatch: BooleanOrFunction;
}

const myOptionsWithBoolean: MyOptions = {
    highlightMatch: true,
}

const myOptionsWithFunction: MyOptions = {
    highlightMatch: (instance: MyInstance, rendered: JQuery<HTMLElement>) => {
        return void 0;
    },
}

myOptionsWithFunction.highlightMatch; // Typescript has No idea what this is 

if (myOptionsWithFunction.highlightMatch && typeof myOptionsWithFunction.highlightMatch !== 'boolean') {
    myOptionsWithFunction.highlightMatch(x as any, y as any);
} else {
    myOptionsWithFunction.highlightMatch // Here this is a boolean
}

游乐场链接

我的推荐?用泛型来做

interface MyInstance {
    x : any
}

type SomeFunction = (instance: MyInstance, rendered: JQuery<HTMLElement>) => void;
type HighlightMatch = boolean | SomeFunction

interface MyOptions<T> {          
    highlightMatch: T;
}

const myOptionsWithBoolean: MyOptions<boolean> = {
    highlightMatch: true,
}

const myOptionsWithFunction: MyOptions<SomeFunction> = {
    highlightMatch: (instance: MyInstance, rendered: JQuery<HTMLElement>) => {
        return void 0;
    },
}

myOptionsWithFunction.highlightMatch; // This is a function Thanks Generic! 
myOptionsWithBoolean.highlightMatch; // This is boolean!

游乐场链接

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

JSON响应中的同一属性可以是数字/布尔值/字符串吗?

html-具有布尔值的属性

使用Powershell更新具有布尔值的xml属性

如何使具有布尔值的状态属性显示在屏幕上(反应形式)

如何验证布尔值是对还是错

我可以告诉TypeScript泛型类型具有构造函数吗?

如何知道我的 json 值是布尔值还是字符串值包含

我如何检查布尔值是假还是真,然后执行某些操作?

如何使用返回布尔值的函数?

反序列化具有nullable属性的布尔值?

具有多个条件的自定义array.sort函数,包括 布尔值

.find()方法:如何我可以返回一个布尔值,而不是我的瑶池对象?

我可以定义Typescript函数参数为布尔型还是字符串型?

布尔值作为原语和布尔值作为对象的属性有什么区别?

PHP OOP:对象属性的值可以是函数吗?

JS类属性验证函数返回布尔值?

AngularJS为什么从函数返回布尔值与属性不同?

我可以在C ++中将int与布尔值相乘吗?

如何将布尔值传递给具有变量名的方法

如何根据布尔值保存具有不同扩展名的文件

Vaadin-如何将具有布尔值的Grid列转换为Checkbox

如何在Python中具有布尔值的列表中打印字典?

不让我将布尔值返回给函数

我很困惑,名字叫什么数据类型?函数数据类型还是布尔数据类型,因为它将返回布尔值?

我可以在函数上使用条件类型来指示布尔值的返回值或实现接口的对象吗

Typescript中带有布尔值的已区分联合

具有布尔值或哈希集的哈希图

条件必须具有静态类型的布尔值

从具有布尔值的数据框中删除行