diff --git a/packages/vee-validate/tests/Field.spec.ts b/packages/vee-validate/tests/Field.spec.ts
index 3e255c1a0..745779ffe 100644
--- a/packages/vee-validate/tests/Field.spec.ts
+++ b/packages/vee-validate/tests/Field.spec.ts
@@ -1125,4 +1125,38 @@ describe('', () => {
expect(error.textContent).toBe('');
expect(input.value).toBe('');
});
+
+ // #3440
+ test('should preserve select input options value type', async () => {
+ const value = ref();
+
+ const wrapper = mountWithHoc({
+ setup() {
+ return {
+ value,
+ };
+ },
+ template: `
+
+
+
+
+ `,
+ });
+
+ await flushPromises();
+ const select = document.querySelector('select') as HTMLSelectElement;
+ const optTrue = document.querySelector('#true') as HTMLOptionElement;
+ const optFalse = document.querySelector('#false') as HTMLOptionElement;
+
+ optTrue.selected = true;
+ dispatchEvent(select, 'change');
+ await flushPromises();
+ expect(value.value).toBe(true);
+
+ optFalse.selected = true;
+ dispatchEvent(select, 'change');
+ await flushPromises();
+ expect(value.value).toBe(false);
+ });
});