获得徽章 19
- 需要创建一个类似于 ReturnType 的实用程序类型,但改进后可以处理异步函数。如何定义此类型?
A.
```ts
type ReturnTypeAsync<T extends (...args: any) => any> = T extends (...args: any) => Promise<infer R>
? R
: T extends (...args: any) => infer R
? R
: any;
```
B.
```ts
type ReturnTypeAsync<T extends (...args: any) => any> = T extends (...args: any) => infer R
? R
: any;
```
C.
```ts
type ReturnTypeAsync<T extends (...args: any) => any> = T extends (...args: any) => Promise<infer R>
? R
: any;
```展开评论点赞 - Typescript接口使用的一些注意事项
接口定义了一个对象的形状,即对象应该具有哪些属性和方法,但它本身不会创建任何对象。
接口可以被类或对象实现,实现接口的类或对象必须符合接口中定义的形状。
接口可以被其它接口继承,从而扩展接口的形状。
接口中的属性和方法都是默认为 public 访问修饰符,如果需要更改,可以使用访问修饰符进行修改。
接口中可以定义可选属性,即属性是可选的,这样可以增加接口的灵活性。
接口中也可以定义只读属性,只能在对象创建时被赋值,不能再被修改。
接口可以定义函数类型,包括函数的参数和返回值类型,用于描述函数的形状。
接口也可以定义索引类型,用于描述可以通过索引访问的属性,包括字符串索引和数字索引。展开等人赞过15 - 考虑下面的代码:
type Button =
| { kind: "round"; renderIcon: () => void }
| { kind: "normal"; renderText: () => void };
function render(button: Button) {
if (button.kind === "round") {
button.renderIcon();
} else {
button.renderText();
}
}
以上代码会出现类型错误吗?
A. 会,因为`renderIcon`和`renderText`在`Button`类型中不存在。
B. 不会出现类型错误。展开评论点赞