<h3 dir="auto">Version</h3>
<p dir="auto">2.5.16</p>
<h3 dir="auto">Reproduction link</h3>
<p dir="auto"><a href="https://raw.githubusercontent.com/indus/stuff/master/vue_issue.jpg" rel="nofollow">https://raw.githubusercontent.com/indus/stuff/master/vue_issue.jpg</a><br>
(sorry - haven't found an online tool that shows type annotations)</p>
<h3 dir="auto">Steps to reproduce</h3>
<p dir="auto">type the following in an TS enabled Editor like VS Code:</p>
<div class="highlight highlight-source-ts notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="new Vue({
    el: '#app',
    props: {
        object: {
            type: Array,
            required: true,
            default: () =&gt; []
        }
    },
    data: function () {
        return {
            message: 'Hello Vue.js!'
        }
    },
    created: function () {
        this.message;
    }
})"><pre class="notranslate"><span class="pl-k">new</span> <span class="pl-smi">Vue</span><span class="pl-kos">(</span><span class="pl-kos">{</span>
    <span class="pl-c1">el</span>: <span class="pl-s">'#app'</span><span class="pl-kos">,</span>
    <span class="pl-c1">props</span>: <span class="pl-kos">{</span>
        <span class="pl-c1">object</span>: <span class="pl-kos">{</span>
            <span class="pl-c1">type</span>: <span class="pl-smi">Array</span><span class="pl-kos">,</span>
            <span class="pl-c1">required</span>: <span class="pl-c1">true</span><span class="pl-kos">,</span>
            <span class="pl-en">default</span>: <span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-c1">=&gt;</span> <span class="pl-kos">[</span><span class="pl-kos">]</span>
        <span class="pl-kos">}</span>
    <span class="pl-kos">}</span><span class="pl-kos">,</span>
    <span class="pl-en">data</span>: <span class="pl-k">function</span> <span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
        <span class="pl-k">return</span> <span class="pl-kos">{</span>
            <span class="pl-c1">message</span>: <span class="pl-s">'Hello Vue.js!'</span>
        <span class="pl-kos">}</span>
    <span class="pl-kos">}</span><span class="pl-kos">,</span>
    <span class="pl-en">created</span>: <span class="pl-k">function</span> <span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
        <span class="pl-smi">this</span><span class="pl-kos">.</span><span class="pl-c1">message</span><span class="pl-kos">;</span>
    <span class="pl-kos">}</span>
<span class="pl-kos">}</span><span class="pl-kos">)</span></pre></div>
<h3 dir="auto">What is expected?</h3>
<p dir="auto">correct type inference (at least) for 'message'</p>
<h3 dir="auto">What is actually happening?</h3>
<p dir="auto">getting Error: "Property 'message' doesn't exist"</p>
<hr>
<p dir="auto">This doesn't happen when the type of the prop is Object:</p>
<div class="highlight highlight-source-js notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="new Vue({
    el: '#app',
    props: {
        object: {
            type: Object,
            required: true,
            default: () =&gt; {}
        }
    },
    data: function () {
        return {
            message: 'Hello Vue.js!'
        }
    },
    created: function () {
        this.message;
    }
})"><pre class="notranslate"><span class="pl-k">new</span> <span class="pl-v">Vue</span><span class="pl-kos">(</span><span class="pl-kos">{</span>
    <span class="pl-c1">el</span>: <span class="pl-s">'#app'</span><span class="pl-kos">,</span>
    <span class="pl-c1">props</span>: <span class="pl-kos">{</span>
        <span class="pl-c1">object</span>: <span class="pl-kos">{</span>
            <span class="pl-c1">type</span>: <span class="pl-v">Object</span><span class="pl-kos">,</span>
            <span class="pl-c1">required</span>: <span class="pl-c1">true</span><span class="pl-kos">,</span>
            <span class="pl-en">default</span>: <span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-c1">=&gt;</span> <span class="pl-kos">{</span><span class="pl-kos">}</span>
        <span class="pl-kos">}</span>
    <span class="pl-kos">}</span><span class="pl-kos">,</span>
    <span class="pl-en">data</span>: <span class="pl-k">function</span> <span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
        <span class="pl-k">return</span> <span class="pl-kos">{</span>
            <span class="pl-c1">message</span>: <span class="pl-s">'Hello Vue.js!'</span>
        <span class="pl-kos">}</span>
    <span class="pl-kos">}</span><span class="pl-kos">,</span>
    <span class="pl-en">created</span>: <span class="pl-k">function</span> <span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
        <span class="pl-smi">this</span><span class="pl-kos">.</span><span class="pl-c1">message</span><span class="pl-kos">;</span>
    <span class="pl-kos">}</span>
<span class="pl-kos">}</span><span class="pl-kos">)</span></pre></div>
<p dir="auto">or 'data' is just a simple object and not a function</p>
<div class="highlight highlight-source-js notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="new Vue({
    el: '#app',
    props: {
        object: {
            type: Array,
            required: true,
            default: () =&gt; []
        }
    },
    data: {
        message: 'Hello Vue.js!'
    },
    created: function () {
        this.message;
    }
})"><pre class="notranslate"><span class="pl-k">new</span> <span class="pl-v">Vue</span><span class="pl-kos">(</span><span class="pl-kos">{</span>
    <span class="pl-c1">el</span>: <span class="pl-s">'#app'</span><span class="pl-kos">,</span>
    <span class="pl-c1">props</span>: <span class="pl-kos">{</span>
        <span class="pl-c1">object</span>: <span class="pl-kos">{</span>
            <span class="pl-c1">type</span>: <span class="pl-v">Array</span><span class="pl-kos">,</span>
            <span class="pl-c1">required</span>: <span class="pl-c1">true</span><span class="pl-kos">,</span>
            <span class="pl-en">default</span>: <span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-c1">=&gt;</span> <span class="pl-kos">[</span><span class="pl-kos">]</span>
        <span class="pl-kos">}</span>
    <span class="pl-kos">}</span><span class="pl-kos">,</span>
    <span class="pl-c1">data</span>: <span class="pl-kos">{</span>
        <span class="pl-c1">message</span>: <span class="pl-s">'Hello Vue.js!'</span>
    <span class="pl-kos">}</span><span class="pl-kos">,</span>
    <span class="pl-en">created</span>: <span class="pl-k">function</span> <span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
        <span class="pl-smi">this</span><span class="pl-kos">.</span><span class="pl-c1">message</span><span class="pl-kos">;</span>
    <span class="pl-kos">}</span>
<span class="pl-kos">}</span><span class="pl-kos">)</span></pre></div>
<h3 dir="auto">Version</h3>
<p dir="auto">2.5.13</p>
<h3 dir="auto">Steps to reproduce</h3>
<p dir="auto">Create a simple component using Typescript:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="import Vue from &quot;vue&quot;

Vue.extend({
    props: {
        myProp: {
            type: Array,
        },
    },
    computed: {
        myComputed(): string {
            return &quot;hello&quot;
        },
        otherComputed(): string {
            return this.myComputed
        },
    },
})"><pre class="notranslate"><code class="notranslate">import Vue from "vue"

Vue.extend({
    props: {
        myProp: {
            type: Array,
        },
    },
    computed: {
        myComputed(): string {
            return "hello"
        },
        otherComputed(): string {
            return this.myComputed
        },
    },
})
</code></pre></div>
<p dir="auto">We have the following error:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content=" TS2322: Type '(() =&gt; any) | ComputedOptions&lt;any&gt;' is not assignable to type 'string'.
  Type '() =&gt; any' is not assignable to type 'string'."><pre class="notranslate"><code class="notranslate"> TS2322: Type '(() =&gt; any) | ComputedOptions&lt;any&gt;' is not assignable to type 'string'.
  Type '() =&gt; any' is not assignable to type 'string'.
</code></pre></div>
<p dir="auto">If we change the type of the prop to <code class="notranslate">String</code>, <code class="notranslate">Number</code> or smtg else we don't have this problem anymore</p>
<h3 dir="auto">What is expected?</h3>
<p dir="auto">No error</p>
<h3 dir="auto">What is actually happening?</h3>
<p dir="auto">Errors</p>
<hr>
<p dir="auto">This problem was not happening with the previous Typescript versions (at least 2.5.2)</p>