Parent 方法和 Child 类方法之间的 TypeScript 可分配性与常规函数的可分配性不同

问题描述 投票:0回答:0

在typescript中,在对常规函数进行赋值时,目标函数中的参数应该可以赋值给源函数中的参数。 例如,在下面的代码中,参数“name”在targetFunc中是string类型,param

name
在srcFunc中是
"abc"|"def"
类型。
string
不是
"abc"|"def"
的子集,这意味着字符串不可分配给“abc”|“def”。因此,TS 按预期报告可分配性错误。

function targetFunc(name:string) {console.log(name)}
function srcFunc(name:"abc"|"def") {console.log(name)}
let t:typeof targetFunc = srcFunc;

It reports the following error as expected:
Type '(name: "abc" | "def") => void' is not assignable to type '(name: string) => void'.
  Types of parameters 'name' and 'name' are incompatible.
    Type 'string' is not assignable to type '"abc" | "def"'.(2322)

但是对于基类和子类之间的方法赋值,没有报同样的错误。 例如,在下面的代码中,

string
不能分配给类型
"abc"|"def"
,但 TS 不会报告任何错误。

class Base {
    print(name:string) {console.log(`base:${name}`)}
}
class Child extends Base {
    print(name:"abc"|"def") {
        console.log(`Child:${name}`)
    }
}
let c:Child = new Child;
let b:Base = c;
b.print("apple")  //"apple" is NOT a subset of "abc"|"def", but TS doesn't report any error

同一个赋值错误,为什么TS报常规函数赋值错误,而父子方法间赋值不报相同错误?

typescript compatibility assign
© www.soinside.com 2019 - 2024. All rights reserved.