type-compatibility.md 1.4 KB
Newer Older
D
DCloud_LXH 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
# 类型兼容性

由于 UTS 语言最终会转换为 kotlin、swift 等语言,UTS 语言中的接口也更接近 kotlin 中的接口或 swift 中的协议,在类型兼容性判断时与 TS 语言的结构类型系统有着明显的区别:

- TS:如果两个类型的内部结构相似(具有相同的属性和方法),那么它们被认为是兼容的,即使它们的名称不同。
- UTS:依赖于类型的显式声明,必需是同一个类型或者存在显式的继承/实现关系。

```ts
interface IPerson {
    name: string
    printName(): void
}

class Person implements IPerson {
    constructor(public name: string) {}
    printName(): void {
        console.log(this.name)
    }
}

class Person1 {
    constructor(public name: string) {}
    printName(): void {
        console.log(this.name)
    }
}

type PersonObject = {
    name: string
    printName(): void
}

class Person2 extends Person {}

const person: IPerson = new Person('Tom') // 正确,Person 实现自 IPerson

const person1: Person = new Person1('Tom') // 错误,Person 与 Person1 无关只是结构相同

const person2: Person = new Person2('Tom') // 正确,Person2 继承自 Person

const person3: IPerson = {
    name: 'Tom',
    printName: function () {
        console.log(this.name)
    }
} as PersonObject // 错误,PersonObject 类型与 IPerson 无关只是结构相同
```