Typescript 为什么我不能在TS中优化对象关键点?
正如标题所说,我似乎无法优化对象上的键,我想知道我做错了什么Typescript 为什么我不能在TS中优化对象关键点?,typescript,Typescript,正如标题所说,我似乎无法优化对象上的键,我想知道我做错了什么 const x:{key?:number}={}; 如果(x.key的类型=='number'){ console.log(x.key);//typescript仍然将'x.key'视为'number |未定义' } 设y:数|未定义; 如果(y的类型=='number'){ console.log(y);//typescript将'y'视为'number` } 我不太确定您在这里想要实现什么,但是typeof在TypeScript
const x:{key?:number}={};
如果(x.key的类型=='number'){
console.log(x.key);//typescript仍然将'x.key'视为'number |未定义'
}
设y:数|未定义;
如果(y的类型=='number'){
console.log(y);//typescript将'y'视为'number`
}
我不太确定您在这里想要实现什么,但是typeof
在TypeScript中扮演三个角色(谢谢@MikeHill)
我认为您试图使用typeof来实现它无法满足的结果。您的示例代码可能需要一些工作,您所追求的行为非常不清楚。我不太确定您在这里想要实现什么,但是
typeof
在TypeScript中扮演三个角色(谢谢@MikeHill)
我认为您试图使用typeof来实现它无法满足的结果。您的示例代码可能需要一些工作,您所追求的行为非常不清楚。expression x.key可能会有副作用,因此编译器无法保证类型
class X {
private firstTime = true;
get key(): number | undefined {
if (this.firstTime) {
this.firstTime = false;
return 1;
}
return undefined;
}
}
const x: { key?: number } = new X();
console.log(typeof x.key); // number
console.log(typeof x.key); // undefined
表达式x.key可能有副作用,因此编译器无法保证类型
class X {
private firstTime = true;
get key(): number | undefined {
if (this.firstTime) {
this.firstTime = false;
return 1;
}
return undefined;
}
}
const x: { key?: number } = new X();
console.log(typeof x.key); // number
console.log(typeof x.key); // undefined
我没有得到和你一样的结果。在本地运行3.3.1时,x.key和y都会“未定义”,除非我给变量赋值。“typescript将
x.key
视为number |未定义”
仍然”-您确定吗?这里(ts v3.3.3)和操场上都是number
。操场上的代码没有抱怨,即没有警告。您运行此操作的typescript版本是什么?TS在这里应该可以正常工作。为了更清楚地了解TS看到了什么,您可以尝试通过将x.key
设置为一个新变量来推断const z=x.key代码>推断常数z:number
。此中间变量在最终代码中不应该是必需的。请参阅启用了strictNullChecks
的示例,以查看TS是否按预期工作并防止误用:我没有得到与您相同的结果。在本地运行3.3.1时,x.key和y都会“未定义”,除非我给变量赋值。“typescript将x.key
视为number |未定义”
仍然”-您确定吗?这里(ts v3.3.3)和操场上都是number
。操场上的代码没有抱怨,即没有警告。您运行此操作的typescript版本是什么?TS在这里应该可以正常工作。为了更清楚地了解TS看到了什么,您可以尝试通过将x.key
设置为一个新变量来推断const z=x.key代码>推断常数z:number
。这个中间变量在您的最终代码中不应该是必需的。请参阅启用了strictNullChecks
以查看TS是否按预期工作并防止误用的示例:我相信问题是关于类型,而不是运行时值。运行时使用typeof是非常误导的,在类型声明中使用typeof是完全不同的事情。他试图在运行时根据事物的外观按类型进行细化。number
是内置的JS类型,条件是可接受的鉴别器,在编译时由TS(as)解释,在运行时由JS解释。他正确地使用了typeof
,但似乎误解了他的工具。@MikeHill,你对这个问题的评论是对的。TypeScript正确地细化了这些块中的类型const blah=x.key
根据类型保护的指示,将number
作为推断类型。很明显,这个问题还有更多的期待。我相信这个问题是关于类型的,而不是关于运行时值的。运行时使用typeof是非常误导的,在类型声明中使用typeof是完全不同的事情。他试图在运行时根据事物的外观按类型进行细化。number
是内置的JS类型,条件是可接受的鉴别器,在编译时由TS(as)解释,在运行时由JS解释。他正确地使用了typeof
,但似乎误解了他的工具。@MikeHill,你对这个问题的评论是对的。TypeScript正确地细化了这些块中的类型const blah=x.key
根据类型保护的指示,将number
作为推断类型。很明显,从这个问题来看,人们期待着更多的东西。