相关疑难解决方法(0)

打字稿:接口与类型

这些语句(接口与类型)之间有什么区别?

interface X {
    a: number
    b: string
}

type X = {
    a: number
    b: string
};
Run Code Online (Sandbox Code Playgroud)

typescript

516
推荐指数
16
解决办法
9万
查看次数

可以在Typescript中扩展类型吗?

说我有以下类型:

type Event = {
   name: string;
   dateCreated: string;
   type: string;
}
Run Code Online (Sandbox Code Playgroud)

我现在想扩展这种类型,即

type UserEvent extends Event = {
   UserId: string; 
}
Run Code Online (Sandbox Code Playgroud)

这不起作用.我怎样才能做到这一点?

javascript typescript

87
推荐指数
6
解决办法
5万
查看次数

Typescript 将未知类型转换为接口类型

我想编写一个函数asA,它接受类型参数unknown并将其作为特定接口类型返回A,或者如果参数与接口类型不匹配则抛出错误A

该解决方案应该是稳健的。即,如果向我的接口类型添加一个新字段A,编译器应该抱怨我的函数缺少对新字段的检查,直到我修复它。

下面是此类函数的示例asA,但它不起作用。编译器说:

元素隐式具有“any”类型,因为类型“a”的表达式不能用于索引类型“{}”。类型“{}”上不存在属性“a”。(7053)

interface A {
    a: string
}

function asA(data:unknown): A {
    if (typeof data === 'object' && data !== null) {
        if ('a' in data && typeof data['a'] === 'string') {
            return data;
        }
    }
    throw new Error('data is not an A');

}

let data:unknown = JSON.parse('{"a": "yes"}');
let a = asA(data);
Run Code Online (Sandbox Code Playgroud)

如何编写asA如上所述的函数?

我可以使用类型转换,例如(data as any)['a'],只要将新字段添加到 时不会出现静默失败A

typescript

15
推荐指数
2
解决办法
3万
查看次数

标签 统计

typescript ×3

javascript ×1