小编Beh*_*ooz的帖子

如何检查“未知”值的属性类型?

我有以下函数,它可能会收到一个未知值:

function formatReason(detail: unknown): string {
    if (detail
        && detail instanceof Object
        && detail.constructor.name === 'Object'
        && detail.hasOwnProperty('description')
        && typeof detail['description'] === 'number'
    ) {
        const output = detail['description'];
        return output;
    }

    return '';
}
Run Code Online (Sandbox Code Playgroud)

detail参数可以是任意值。如果它是一个具有description字符串类型属性的对象,则该函数应返回该属性值,否则返回空字符串。

首先,你建议使用anyunknown用于detail参数?

其次,无论我做什么, for 的类型output最终都是any. 我怎样才能确定它是string

typescript

22
推荐指数
2
解决办法
7873
查看次数

有没有一种方法可以确保传递的值具有使用泛型的某些字段?

我试图在 Go 中定义一个通用函数,它接受具有某些字段的值,例如ID int. 我尝试了几种方法,但似乎都不起作用。这是我尝试过的一个例子。

package main

import (
    "fmt"
)

func Print[T IDer](s T) {
    fmt.Print(s.ID)
}

func main() {
    Print(Person{3, "Test"})
}

type IDer interface {
    ~struct{ ID int }
}

type Person struct {
    ID   int
    Name string
}

type Store struct {
    ID     int
    Domain string
}

Run Code Online (Sandbox Code Playgroud)

这是游乐场链接:https ://gotipplay.golang.org/p/2I4RsUCwagF

在上面的示例中,我想保证传递给Print函数的每个值都有一个属性ID int,该属性也可以在函数中访问。有什么方法可以在 Go 中实现此目的,而无需在接口中定义方法(例如GetID() int)?

generics go

7
推荐指数
1
解决办法
2220
查看次数

标签 统计

generics ×1

go ×1

typescript ×1