TypeScript:Property';propertyName';不存在于类型';T';

TypeScript:Property';propertyName';不存在于类型';T';,typescript,typescript-typings,typescript-generics,Typescript,Typescript Typings,Typescript Generics,目前我正在学习TypeScript,我遇到了一个问题:“类型“T”上不存在属性“value” 这是我的密码: type ParseType = <T>(value: T, opts: any, useRounding: boolean) => number; const parse: ParseType = function(value, opts: any, useRounding): number { //... if (isNumber || value instance

目前我正在学习TypeScript,我遇到了一个问题:“类型“T”上不存在属性“value”

这是我的密码:

type ParseType = <T>(value: T, opts: any, useRounding: boolean) => number;
const parse: ParseType = function(value, opts: any, useRounding): number {
//...
if (isNumber || value instanceof currency) {
  v = (isNumber ? value : value.value) * precision;
}
//...
typeparsetype=(值:T,选项:any,useRounding:boolean)=>number;
const parse:ParseType=function(value,opts:any,useRounding):number{
//...
如果(isNumber | |货币的值实例){
v=(isNumber?值:value.value)*精度;
}
//...
我将非常感谢您的帮助:)


UPD:我刚刚添加了新接口
接口货币{value?:number;}
,使我的泛型类型扩展它:
类型ParseType=(值:T,选项:any,用户边界:boolean)=>number;
,并按照注释中的建议编写了两个独立的条件。

我猜
货币
总是包含一个
属性?Typescript无法推断这一点,因为您使用了两个嵌套的条件语句-理论上可以,但它不够聪明。在内部三元条件中,Typescript不能I don’我不知道,
!isNumber
也意味着货币的
实例
-此连接已断开。
isNumber
也会发生同样的情况-即使您通过检查
在某个点是否为数字得到此布尔值,如果您在co中的其他位置使用此类型推断属性,此类型推断属性也不会继续Typescript要推断类型,必须在条件中进行检查

尝试以下操作(将嵌套条件展平为两个单独的条件):

一个简明的例子:

function abc<R>(v: R) {
  if (typeof v === 'number') {
    // Typescript knows v is a number
  }

  const isNumber = typeof v === 'number';
  if (isNumber) {
    // Typescript knows nothing about v
  }
}
功能abc(v:R){
如果(v的类型=='number'){
//Typescript知道v是一个数字
}
const isNumber=typeof v==‘number’;
如果(isNumber){
//Typescript对v一无所知
}
}

谢谢您的帮助!两个单独的条件是有意义的,您是对的。我像您写的那样做了,但仍然出现此错误。我尝试使用可选链接和hasOwnProperty方法,但没有帮助
function abc<R>(v: R) {
  if (typeof v === 'number') {
    // Typescript knows v is a number
  }

  const isNumber = typeof v === 'number';
  if (isNumber) {
    // Typescript knows nothing about v
  }
}