[TypeScript] Use the TypeScript "unknown" type to avoid runtime errors

The "any" type can be very useful, especially when adding types to an existing JavaScript codebase, but it can also lead to lots of runtime errors, as it provides no type-checking. The "unknown" type on the other hand, restricts developer from calling anything on it or assigning to any other type. The only way to use "unknown" variables is to apply logic flow type narrowing or casting, as that's the only way TypeScript can trust that it's dealing with a correct type. The "unknown" type is useful when building services or APIs that can return data of an unknown shape, so we might want to stop other developers from using it in potentially dangerous ways until it's been narrowed down to a specific type.

"any" type can pass in the compile phases without any problem, but will throw error in runtime.

 

We can use new type: 'unknown'.

For exmaple, we have code:

interface IComment {
    date: Date;
    message: string;
}

interface IDataService {
    getData(): unknown;
}

let service: IDataService;

const response = service.getData();

 

You cannot directly use 'unknown' type, we have to tell Typescipt what type it is:

if(typeof response === 'string') {
    console.log(response.toUpperCase());
} else if(isComment(response)){
    response.date;
}

function isComment(type: any): type is IComment {
    return (<IComment>type).message !== undefined && (<IComment>type).date !== undefined;
}

 

转载于:https://www.cnblogs.com/Answer1215/p/10301078.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值