如何使用打字稿在 Nativescript-vue 中传递对象而不是字符串?

How to pass object instead of string in Nativescript-vue with typescript?

我想实现 {N} Playground Code

中的 PromptDialog
import dialogs from "tns-core-modules/ui/dialogs";
 
  export default {
    methods: {
            onButtonTap() {
                console.log("Button was pressed");
                prompt({
                    title: "Email Prompt",
                    message: "Provide your email address:",
                    okButtonText: "OK",
                    cancelButtonText: "Cancel",
                    defaultText: "name@domain.com",
                    inputType: dialogs.inputType.email
                }).then(result => {
                    console.log(`Dialog result: ${result.result},
                text: ${result.text}`);
                });
            }
        },
  }

但是 Vetur 给出了以下 Typescript 错误。

Argument of type '{ title: string; message: string; okButtonText: string; cancelButtonText: string; defaultText: string; inputType: string; }' is not assignable to parameter of type 'string'.

这只是 nativescript-vue prompt documentation 中的示例代码,但是 typescript 改编。

基本使用

    forgotPassword() {
      prompt('Your message to the user', 'Suggested user input').then(result => {
        console.log(`Dialog result: ${result.result}, text: ${result.text}`);
      });
    }

Vetur 错误:

Property 'then' does not exist on type 'string'.

这是文档的误导。没有API叫提示。应该是dialogs.prompt。 正确示例

<script lang="ts">
    import * as dialogs from "tns-core-modules/ui/dialogs";
     export default {
        methods: {
            onButtonTap() {
                console.log("Button was pressed");
                dialogs.prompt({
                    title: "Email Prompt",
                    message: "Provide your email address:",
                    okButtonText: "OK",
                    cancelButtonText: "Cancel",
                    defaultText: "name@domain.com",
                    inputType: dialogs.inputType.email
                }).then(result => {
                    console.log(`Dialog result: ${result.result},
                text: ${result.text}`);
                });
            }
        },

        data() {
            return {};
        }
    };
</script>