gpt4 book ai didi

typescript - 禁止在 Typescript 中将任何类型的变量分配给其他类型的变量

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

所以我有这段代码

let var1: any;
var1 = 'hello';
let var2: number = var1;

出于某种原因, typescript 并没有提示我正在尝试分配类型为 any 的变量到 number .有人知道是否有禁止这样做的编译器或 tslint 规则吗?是的,我现在可以禁止 any , 但即使不允许,错误也会发生在 line 1 中, 不在 line 3 .

Typescript playground example


为我原来的问题添加更多细节

我的具体情况是使用具有如下定义的第三方库时

// Definition file
export declare class StateParams {
[key: string]: any;
}

... later on in my own code

function myFunc(theVar: StateParams) {
// I know myParam is a number, but all typescript knows is that myParam is of type any
let otherVar: number = theVar.myParam;
}

所以,即使我有 tsLint no-any规则,这无济于事, typescript 也不会提示,我对 StateParams 无能为力。因为我无法控制它

最佳答案

基于“3.11.4 分配兼容性”部分下的 TypeScript 语言规范 (https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md#3.11.4):

S is assignable to a type T, and T is assignable from S, if S has no excess properties with respect to T (3.11.5) and one of the following is true:

  • S and T are identical types.
  • S or T is the Any type.

这表示任何类型都可以分配给“任何”,而“任何”都可以分配给任何其他类型。

最佳做法是永远不要在代码中使用类型“any”,除非您将现有的 JS 代码库移至 TS。在这种情况下,您可以从所有类型的“任何”开始,然后随着时间的推移将它们更改为更具体的类型。

如果您的变量具有无法使用简单 TS 类型捕获的复杂类型,您可以手动定义更具体的类型或使用联合来支持多种类型。例如:

let var1: number | string;
var1 = 'hello';
let var2: number = var1;

现在,上面的代码将正确地抛出一个错误,即您不能将可能类型为 var1 的字符串分配给 var2

关于typescript - 禁止在 Typescript 中将任何类型的变量分配给其他类型的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49162702/

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