gpt4 book ai didi

typescript - 是否有 TypeScript 编译器选项强制对对象属性进行类型检查?

转载 作者:搜寻专家 更新时间:2023-10-30 21:08:28 24 4
gpt4 key购买 nike

为了编写更健壮的代码,我正在考虑将 TypeScript 用于我的基于 Web 的项目。到目前为止,我对这门语言的经验相对较少,但我遇到了一个我难以搜索的问题。

考虑下面的 TypeScript 代码:

public static getResponseCode(resObj: object): number {
let c: number = resObj["c"]
return c;
}

有没有一种方法可以强制 TypeScript 编译器将我拉到这里并告诉我 resObj["c"] 可能不是数字,我需要先检查它是否是一个数字?例如。我可以强制 TypeScript 让我像这样(或类似的东西)重写代码吗?:

public static getResponseCode(resObj: object): number {
if (typeof resObj["c"] !== "number") { return APIResponseCode.UnknownFailure; }

let c: number = resObj["c"]
return c;
}

我希望得到的结果与我的结果完全一样,因为 resObj["c"] 的类型是 any。我可以在这里做什么? TypeScript 中是否使用了通用模式?

最佳答案

您可以打开noImplicitAny 编译器选项。编译器会在任何时候隐含任何东西时提示。

我们在 tsconfig.json 中设置了 noImplictAny。

{
"compilerOptions": {
"noImplicitAny": true
}
}

或者我们在命令行中像这样设置 tsc --noImplicitAny

这会迫使你做某事。

例如,您可以显式使用 any。

public static getResponseCode(resObj: object): number {
const resAny = resObj as any;
if (resAny.c && typeof resAny.c !== "number") {
return APIResponseCode.UnknownFailure;
}

const c: number = resAny.c;
return c;
}

或者您可以使用 a union type and a type guard 的接口(interface).

interface ResObj {
c: boolean | string | number | object;
}

public static getResponseCode2(resObj: ResObj): number {

if (typeof resObj.c !== "number") {
return APIResponseCode.UnknownFailure;
}

const c: number = resObj.c;
return c;
}

关于typescript - 是否有 TypeScript 编译器选项强制对对象属性进行类型检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45645845/

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