你如何使用 typescript 接口输入提示 Vue 道具?

Dev*_*ime 5 typescript vue.js

真的把我的头撞在墙上。我记得在 Angular 工作时,TS 接口可用于键入提示参数。

我想对 Vue 中的道具做同样的事情。

有任何想法吗?代码如下,但检查仅针对标准对象进行,因此传入任何对象都是有效的:

import Vue from 'vue';
import Person from './../models/Person';

export default Vue.extend({
  name: 'HelloWorld',
  props: {
    person: {
        type: Object as () => Person
    },
  },
});

Run Code Online (Sandbox Code Playgroud)

界面如下:

export default interface Person {
    firstName: string;
    lastName: string;
}
Run Code Online (Sandbox Code Playgroud)

小智 16

<script lang="ts">
import Person from './../models/Person';

export default({
  name: 'HelloWorld',
  props: {
    person: {
        type: Object as ()=> Person
    },
  },
});
</script>
Run Code Online (Sandbox Code Playgroud)

  • 正如目前所写的,您的答案尚不清楚。请[编辑]添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。您可以[在帮助中心](/help/how-to-answer)找到有关如何写出好的答案的更多信息。 (3认同)

Dev*_*ime 5

是的 - 结果你不能使用接口。当您考虑 PHP7 中的类型提示之类的事情时,事后看来这是完全有意义的。

答案是将接口应用于类,并使用该类来代替类型提示。对于抽象层,我对必须将错误的类应用于类型提示的担忧是没有根据的,因为任何扩展或实现该类的Person类都将是传递给 prop 的有效值person

export default interface NameInterface {
    firstName: string;
    lastName: string;
}
Run Code Online (Sandbox Code Playgroud)
import NameInterface from './../interfaces/NameInterface';
export default class Person implements NameInterface {

    firstName: string;
    lastName: string;

    constructor( firstName: string, lastName: string ) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
}
Run Code Online (Sandbox Code Playgroud)
<script lang="ts">
import Vue from 'vue';
import Person from './../models/Person';

export default Vue.extend({
  name: 'HelloWorld',
  props: {
    person: {
        type: Person
    },
  },
});
</script>
Run Code Online (Sandbox Code Playgroud)