
获得徽章 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. 不会出现类型错误。展开评论点赞 - 以下代码:
type Person = {
firstName: string;
surname: string;
profile: {
rating: string;
}
}
const bob: Readonly<Person> = {
firstName: "Bob",
surname: "Keel",
profile: {
rating: "medium"
}
bob.surname = "Steel";
bob.profile.rating = "high";
};
在最后两行的`surname`和`rating`分配中,是否会发生任何类型错误?
A. 两行都会出现类型错误。
B. 两行都不会出现类型错误。
C. `surname`赋值时会出现类型错误,但`rating`赋值时不会出现类型错误。
D. `rating`赋值时会出现类型错误,但`surname`赋值时不会出现类型错误。展开1点赞