gpt4 book ai didi

typescript : `{ key(): type }` 与 `{ key: () => type }`

转载 作者:搜寻专家 更新时间:2023-10-30 20:54:42 26 4
gpt4 key购买 nike

一个同事刚刚在 PR 中写了这个,我很惊讶它能工作,因为我从未见过语法。

这些有什么区别吗?

type x = {
foo(): void;
bar: () => void;
}

const x: x = {
foo: () => { },
bar: () => { }
}

playground link

最佳答案

第一个 (foo(): void;) 是方法定义,第二个 (bar: () => void;) 是字段定义恰好是一个函数类型 (() => void;)

明显的区别是在 intelisene 中用于代码完成的图标。

在大多数情况下,功能上没有区别。对于类,方法被分配给原型(prototype),而字段通常被分配给实例,但这只是一个对象类型,因此函数分配的位置实际上取决于执行实现的对象,而不是类型本身。

就类型而言,最大的区别是 strictFunctionTypes 下的行为 ( pr )。它的要点是方法的行为是双变的,而字段的行为是逆变的,所以下面的代码中只有一个是错误的:

type x = {
foo(x: number | string): void;
bar: (x: number | string) => void;
}

const x: x = {
foo: (x: number) => { },// this is fine, methods are bivariant
bar: (x: number) => { } // err here, fields are contravariant
}

关于 typescript : `{ key(): type }` 与 `{ key: () => type }`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56551899/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com